从击倒中的视图解除视图模型

ILy*_*Lya 38 forms mvvm unbind knockout.js

我正在寻找淘汰赛中的解除绑定功能.不幸的是谷歌搜索和查看这里提出的问题并没有给我任何有关该主题的有用信息.

我将提供一个示例来说明需要哪种功能.

让我们说我有一个有几个输入的表格.此外,我有一个绑定到此表单的视图模型.出于某种原因,作为对用户操作的反应,我需要从表单中取消绑定我的视图模型,即,由于操作已完成,我希望所有可观察对象停止对相应值的更改做出反应,反之亦然 - 对可观察对象所做的任何更改都应该' t影响输入值.

实现这一目标的最佳方法是什么?

Mar*_*son 48

您可以使用ko.cleanNode删除绑定.您可以将其应用于特定DOM元素或更高级别的DOM容器(例如整个表单).

有关示例,请参见http://jsfiddle.net/KRyXR/157/.

  • 对于我正在使用jquery的项目,我通常乐意放弃1.5ms以避免输入额外的15个字符.我想如果有机会我会坚持使用jquery选择器. (18认同)
  • 辉煌!谢谢! (2认同)
  • 下次写getElementById而不是$("#theid")[0]它更好地使用JavaScript而不是jQuery用于一切 (2认同)
  • 请注意,`cleanNode()`确实(至少从2.2.1开始)擦除其事件处理程序的节点等.例如,当我有一个ko-bound bootstrap模式时,对我来说是个坏消息.更多信息:https://github.com/knockout/knockout/issues/1130 (2认同)

aam*_*jad 15

@Mark Robinson的回答是正确的.

尽管如此,使用Mark回答我做了以下,你可能会觉得有用.

  // get the DOM element
  var element = $('div.searchRestults')[0];
  //call clean node, kind of unbind
  ko.cleanNode(element);
  //apply the binding again
  ko.applyBindings(searchResultViewModel, element);
Run Code Online (Sandbox Code Playgroud)