【问题标题】:Reapply bindings in knockout在淘汰赛中重新应用绑定
【发布时间】:2017-06-27 04:33:01
【问题描述】:

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

请看这里:http://jsfiddle.net/baio/9UcUs/5/

怎么办?

【问题讨论】:

  • 这可能不会直接回答您的问题,但更标准的剔除方法是绑定您的视图模型,然后更改模型的内容,而不是每次都更改整个模型。有关示例,请参见 jsfiddle.net/9UcUs/8
  • 相关代码应该始终是in的问题,而不仅仅是链接(甚至不是jsFiddle)。

标签: knockout.js


【解决方案1】:

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

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

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

编辑:

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

【讨论】:

  • 快进到 KO v 3.5,它对我有用。至少,它通过了我粗略的初步测试
【解决方案2】:

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

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

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

【讨论】:

  • 记住 Knockout 不依赖于 jQuery:使用 $('#yourul')[0]$('#div')[0] 代替
【解决方案3】:

在做:

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

如@fengd 的答案中所述工作。当前有一个由 foreach 语句填充的表,该表具有可扩展的行,每个行都有一个动态添加的子表,该子表也由 foreach 语句填充。在动态插入每个子表后,执行上述设置子表的绑定并填充数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-10-31
    • 2013-08-14
    • 1970-01-01
    相关资源
    最近更新 更多