我基本上想在同一页面上为不同的对象重新应用绑定,但是有奇怪的行为。重新应用绑定后,项目列表丢失。
请看这里:http: //jsfiddle.net/baio/9UcUs/5/
该怎么办?
简短的回答是它不受支持。长答案是有一些方法可以解决它。一种方法是调用cleanNode
before applyBindings
,但这不会清除事件处理程序。另一种方法是将您的视图模型包装在一个可观察对象中,然后更新该可观察对象以重新应用绑定;这工作得更好,但仍然有一个小问题(见下文)。
这是您使用可观察视图模型方法的示例:http: //jsfiddle.net/mbest/9UcUs/9/
我发现使用可观察视图模型的唯一问题是事件处理程序没有完全更新为新的视图模型。他们将在新视图模型中调用正确的函数,但this
和data
值将用于原始视图模型。
编辑:
Knockout 3.0(目前计划于本月发布)完全支持可观察视图模型。自定义绑定仍然可能存在问题,但希望所有这些都将很快记录在案。
您可以将相同的视图模型绑定到不同的元素,您需要指定要应用绑定的元素。
ko.applyBindings(vm, $('#yourul'));
ko.applyBindings(vm, $('#div'));
正在做:
ko.applyBindings(viewModel, $('#somejQObj')[0]);
按照@fengd 回答的评论中的说明工作。当前有一个由 foreach 语句填充的表,该表具有可扩展的行,每个行都有一个动态添加的子表,该子表也由 foreach 语句填充。在动态插入每个子表之后,执行上述设置子表的绑定并填充数据。