没有内置的方式做到这一点 - 这是唯一建在控制用于遍历数据列表视图。但是,您不能嵌套列表视图。
有两种方法来解决这个问题,这取决于你想要的结果:
1)字符串化的嵌套数据:你可以做到这一点通过编写一个WinJS.Binding.converter
,将您的数据的数组转换成一个单一的字符串值。例如
代码:
WinJS.Namespace.define("Examples.Converters", {
nestedDataConverter: WinJS.Binding.converter(function(input) {
// Assume input is array
var result = "";
input.forEach(function(data) {
result += data.nested_data + ", " + bar + ";";
});
result result;
}),
});
模板:
我建议的解决办法来建立你自己的控制,将你的阵列(或WinJS.Binding.List
),并创建所需的元素/布局。我在一个我工作的项目中完成了这项工作,而且这非常简单。
示例模板:现在
<div class="appTemplate" data-win-control="WinJS.Binding.Template">
<div class="innerTemplate">
<h1 data-win-bind="innerText: data">
<h2 data-win-bind="innerText: nested Examples.Converters.nestedDataConverter">
</div>
</div>
,在H2将有数据的单串的版本。
2)创建一个控件以显示丰富的数据:为此,您需要创建一个新的WinJS控件并将其用于您的模板中。
控制例如:
WinJS.Namespace.define("Examples.Controls", {
Stamper: WinJS.Class.define(function(element, options) {
WinJS.UI.setOptions(this, options);
this.domElement = element;
}, {
domElement: nullm
_data: null,
data: {
set: function(val) {
this._data = val;
updateLayout();
}
},
updateLayout: function() {
this.domElement.innerHTML = "";
if(!this._data) {
return;
}
this._data.forEach(function(item) {
var el = document.createElement("div");
el.textContent = "Data: " + item.nested_data + ", " + item.bar;
this.domElement.appendChild(el);
}.bind(this));
}
}),
});
模板:
<div class="appTemplate" data-win-control="WinJS.Binding.Template">
<div class="innerTemplate">
<h1 data-win-bind="innerText: data"></h1>
<div data-win-control="Examples.Controls.Stamper"
data-win-bind="winControl.data: nested"></div>
</div>
</div>
这种控制可以扩展到渲染嵌套模板和其它项目。这都是你想得到多么复杂的问题。