にバインドされたアイテムを含む監視可能な配列がありul
ます。li
アイテムが追加されたら、ul
要素の幅を子要素の合計幅に設定できるように、アイテムのセット全体の幅を計算する必要がありli
ます。
foreach
バインディングでこれを行うにはどうすればよいですか?
<div>
<h2 data-bind="visible: items().length">Test</h2>
<ul data-bind="foreach: { data: items, afterAdd: $root.myAfterAdd }">
<li data-bind="text: name"></li>
</ul>
</div>
そして JavaScript:
var viewModel = {
items: ko.observableArray([
{ name: "one" },
{ name: "two" },
{ name: "three" }
]),
myAfterAdd: function(element) {
if (element.nodeType === 1) {
alert("myAfterAdd");
}
},
addItem: function() {
this.items.push({ name: 'new' });
}
};
ko.applyBindings(viewModel);
// once foreach has finished rendering I have to set the width
// of the ul to be the total width of the children!
afterAdd
各要素が追加された後に幅を「更新」できるように使用してみul
ましたが、残念ながらafterAdd
、最初のアイテムに対して発火しないことがわかりました! 追加のアイテムを押したときにのみ発火します...
li
アイテム内のコンテンツの幅は不明になることに注意してください:)
サンプル シナリオについては、このフィドルを参照してください。