强制淘汰foreach绑定更新html

时间:2013-07-27 07:57:02

标签: knockout.js

拖拉后我的foreach绑定更新有问题。从容器中删除项目:

< div id="components-wrapper" data-bind="foreach: components" >.

组件 - observableArray。

拖动&amp; drop仅影响HTML,因此组件保持不变但HTML更改。如何强制foreach绑定重新呈现组件以将HTML返回到其原始状态?

3 个答案:

答案 0 :(得分:3)

调用components.valueHasMutated()将强制ko刷新视图。

答案 1 :(得分:2)

TLDR:我发现强制使用foreach绑定刷新视图的唯一可靠方式是:

var tmp = model.foo(); //save the observable current value
model.foo([]);         //assign an empty array to the observable
model.foo(tmp);        //the foreach binding will re-render the list

我有一个类似的问题,一个可观察的数组&#34; page&#34;使用&#34; foreach&#34;绑定到ul的对象。 foreach绑定对&#34;重新排序&#34;没有反应。数组中的页面。它确实将部分反应为推送和删除:它将渲染/删除添加/删除的元素,但保持渲染的foreach具有相同的旧订单。在可观察数组上调用.valueHasMutated()并不起作用,但上面的方法可以解决这个问题。

答案 2 :(得分:0)

Knockout的一般想法是使用ViewModel来驱动显示(html),所以在你的drop事件中,你应该有代码components.add(new Component()),那应该更新html。