Я пытаюсь создать вложенные повторитель или вложенное представление списка с помощью WinJS 4.0, но я не могу понять, как связать источник данных внутреннего списка/повторителя.Вложенные ListView или вложенные репитеры
Вот пример того, что я пытаюсь сделать (обратите внимание, что управление может быть повторитель, который я предпочел бы):
HTML:
<div id="myList" data-win-control="WinJS.UI.ListView">
<span data-win-bind="innerText: title"></span>
<div data-win-control="WinJS.UI.ListView">
<span data-win-bind="innerText: name"></span>
</div>
</div>
JS:
var myList = element.querySelector('#myList).winControl;
var myData = [
{
title: "line 1",
items: [
{name: "item 1.1"},
{name: "item 1.2"}
]
},
{
title: "line 2",
items: [
{name: "item 2.1"},
{name: "item 2.2"}
]
}
];
myList.data = new WinJS.Binding.List(myData);
Когда я пытаюсь это сделать, для внутреннего списка ничего не отображается. Я попытался использовать этот ответ Nested Repeaters Using Table Tags и этот WinJS: Nested ListViews, но у меня все еще есть такая же проблема, и я надеялся, что это будет немного менее сложно (например, KnockOut).
Я знаю, что упоминается, что WinJS не поддерживает вложенные ListViews, но это похоже на несколько лет назад, и я надеюсь, что это все еще не проблема.
Update
я смог вложенный ретранслятор правильно работать, благодаря ответу Kraig в. Вот что мой код выглядит как:
HTML:
<div id="myTemplate" data-win-control="WinJS.Binding.Template">
<div
<span>Bucket:</span><span data-win-bind="innerText: name"></span>
<span>Amount:</span><input type="text" data-win-bind="value: amount" />
<button class="removeBucket">X</button>
<div id="bucketItems" data-win-control="WinJS.UI.Repeater"
data-win-options="{template: select('#myTemplate')}"
data-win-bind="winControl.data: lineItems">
</div>
</div>
</div>
<div id="budgetBuckets" data-win-control="WinJS.UI.Repeater"
data-win-options="{data: Data.buckets,template: select('#myTemplate')}">
</div>
JS: (после "использовать строгий" заявление)
WinJS.Namespace.define("Data", {
buckets: new WinJS.Binding.List([
{
name: "A",
amount: 5,
lineItems: new WinJS.Binding.List([
{ name: 'test item1', amount: 50 },
{ name: 'test item2', amount: 25 }
]
)
}
])
})
* Обратите внимание, что это отвечает часть моего вопроса, однако , Я бы очень хотел сделать это после вызова репо и установить программный источник ретранслятора. Я буду продолжать работать над этим, и если я получу его, я опубликую это как принятый ответ.
Thanks Kraig. Все еще не удается заставить его работать. На экране ничего не отображается, даже если данные есть. Я завершаю просто вывод объекта так: '{" name ":" A "," amount ":" 5 "," lineItems ": {" _ currentKey ": 2," _ keys ": null," _ keyMap ": {"0": {"handle": "0", "key": "0", "data": {"name": "test item1", "amount": 50}}, "1": {" handle ":" 1 "," key ":" 1 "," data ": {" name ":" test item2 "," amount ": 25}}}}}'. Я буду продолжать изучать его, если я не могу заставить его работать, я могу просто включить Knockout, так как это проще (IMO). – JasonWilczak
Вы используете шаблоны или пытаетесь напрямую использовать элементы управления? И ListView, и Repeater afaik ориентированы вокруг шаблонов. Я также был бы рад взглянуть на код, если вы можете бросить репрограмму где-нибудь или, по крайней мере, включить достаточно здесь, чтобы я мог попасть в проект (но самодостаточное воспроизведение, как правило, проще всего) –
I на самом деле это просто заработало! Казалось, мне нужно было обернуть содержимое своего шаблона в div, чтобы он отображался правильно. Я обновлю свой вопрос кодом, который я использовал, спасибо! – JasonWilczak