拖拉后我的foreach绑定更新有问题。从容器中删除项目:
< div id="components-wrapper" data-bind="foreach: components" >.
组件 - observableArray。
拖动&amp; drop仅影响HTML,因此组件保持不变但HTML更改。如何强制foreach绑定重新呈现组件以将HTML返回到其原始状态?
答案 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。