これを行うための組み込みの方法はありません。データを反復処理するための組み込みのコントロールはリストビューだけです。ただし、リストビューをネストすることはできません。
希望する結果に応じて、この問題を解決する2つの方法があります。
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>
このコントロールを拡張して、ネストされたテンプレートやその他のアイテムをレンダリングできます。それはあなたがどれだけ複雑になりたいかという問題です。