2015-02-09 66 views
0

在我的表单中,一个列表被“填充”了。这是ul代码:当一个foreach数据绑定完成时做一些事

<ul class="sortable ui-widget-content" data-bind="foreach: menus"> 
    <li> 
     <a href="#" data-bind="attr: { title: name }, click: $parent.navigate"> 
     <i data-bind="attr: { class: iconClass }"></i> 
      <span data-bind="text: title"></span> 
     </a> 
    </li> 
</ul> 

它的工作原理很好。我现在需要的是,当foreach完成后,运行一段代码。任何想法如何实现?

+0

好奇:为什么* *你(想你)需要这个? – Jeroen 2015-02-15 11:42:36

回答

4

Knockout Documentation:(看afterRender,注7)

如果你需要运行所产生的DOM 元素一些进一步的定制逻辑,你可以使用任何 afterRender/afterAdd/beforeRemove/beforeMove/afterMove回调

<ul data-bind="foreach: { data: myItems, afterAdd: yellowFadeIn }"> 
    <li data-bind="text: $data"></li> 
</ul> 

<button data-bind="click: addItem">Add</button> 

<script type="text/javascript"> 
    ko.applyBindings({ 
     myItems: ko.observableArray([ 'A', 'B', 'C' ]), 
     yellowFadeIn: function(element, index, data) { 
      $(element).filter("li") 
         .animate({ backgroundColor: 'yellow' }, 200) 
         .animate({ backgroundColor: 'white' }, 800); 
     }, 
     addItem: function() { this.myItems.push('New item'); } 
    }); 
</script> 

你是这样的吗?

编辑:在这种情况下afterRender应该没问题

+0

类似的东西是的...但文档说,每当一个新的元素进入时发生“添加”...我希望像“ ” – Leonardo 2015-02-09 17:50:03

+0

“Add”在文档中用作示例,但可以使用“afterRender”。我编辑了我的答案 – rakhmanoff 2015-02-09 17:56:22

相关问题