在淘汰赛中重新申请绑定

时间:2012-09-07 08:48:41

标签: knockout.js

我基本上想在不同对象的同一页面上重新应用绑定,但是有一些奇怪的行为。重新应用绑定后,项目列表将丢失。

请参见此处:http://jsfiddle.net/baio/9UcUs/5/

怎么办?

3 个答案:

答案 0 :(得分:7)

简短的回答是它不受支持。答案很长,有一些方法可以解决它。一种方法是在cleanNode之前调用applyBindings,但这不会清除事件处理程序。另一种方法是将视图模型包装在一个observable中,然后更新该observable以重新应用绑定;这样做效果更好,但仍有一点问题(见下文)。

以下是使用可观察视图模型方法的示例:http://jsfiddle.net/mbest/9UcUs/9/

我发现使用可观察视图模型的唯一问题是事件处理程序没有使用新视图模型完全更新。他们将在新视图模型中调用正确的函数,但thisdata值将用于原始视图模型。

编辑:

Knockout 3.0(目前计划于本月发布)完全支持可观察的视图模型。自定义绑定仍然存在问题,但希望很快就会记录下来。

答案 1 :(得分:5)

您可以将相同的viewmodel绑定到不同的元素,您需要指定要应用绑定的元素。

ko.applyBindings(vm, $('#yourul'));

ko.applyBindings(vm, $('#div'));

答案 2 :(得分:0)

这样做的:

ko.applyBindings(viewModel, $('#somejQObj')[0]);

按照@ fengd的回答评论中的说法。目前有一个由foreach语句填充的表,该表具有可扩展的行,每个行都有一个动态添加的子表,该子表也由foreach语句填充。动态插入每个子表后,执行上述操作设置子表的绑定并填充数据。