У меня есть наблюдаемый массив с элементами, привязанными к ul
. Мне нужно рассчитать ширину всего набора из li
предметов, как только предметы были добавлены, поэтому я могу установить ширину элемента ul
на общую ширину ребенка. li
элементов.Пользовательская привязка, когда foreach закончил рендеринг
Как я могу это сделать с привязкой 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
элементов будет неизвестной ширины :)
См this fiddle для примера сценария.
'afterRender' делает то, что вы хотите, и запускается после первоначального рендера. – Tyrsius
Проблема с 'afterRender' заключается в том, что она вызывается до того, как элемент dom полностью инициализирован (например, элемент li), это дает мне неправильную ширину. – Umair
На стороне записки, я могу очень любопытно: * why * вы бы хотели сделать это? – Jeroen