哪些Knockout.js绑定是“双向”的?

布莱恩布劳恩

Knockout.js具有双向绑定,实时示例展示value绑定(应用于文本输入时)如何更新视图模型。

但是,我尝试更新其他绑定(例如text),发现该视图不会更新viewmodel。请参见以下示例:http : //jsfiddle.net/w7t89tuu/

从淘汰赛的文档中尚不清楚它们的某些绑定是否双向,而其他绑定不是。视图在什么条件下可以更新视图模型?

乔塔贝

简短答案

双向绑定:所有一般用户可以直接更改,无需特殊脚本的帮助,如表单控件的值或状态相关的东西绑定:valuehasFocustextInputcheckedselectedOptions或与用户可以更改的内容相关的任何自定义绑定(将5个可点击星标的典型示例实现为ko自定义绑定)。

单向绑定:用户无法直接更改的所有状态,例如visible用户不能直接更改可见性:必须通过脚本来完成。在这种情况下,脚本不应更改DOM元素本身的可见性,而应更改可观察范围。前者不会更新可观察对象,但后者会更新绑定元素的可见性。

长答案

如果您了解如何实现自定义绑定,您将了解它们的工作方式:创建自定义绑定

ko.bindingHandlers.yourBindingName = {
  init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
    // This will be called when the binding is first applied to an element
    // Set up any initial state, event handlers, etc. here
  },
  update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
    // This will be called once when the binding is first applied to an element,
    // and again whenever any observables/computeds that are accessed change
    // Update the DOM element based on the supplied values here.
  }
};

如果进一步看,您会看到什么init回调可以用于:

淘汰赛将为您使用绑定的每个DOM元素调用一次init函数。初始化有两个主要用途:

1.为DOM元素设置任何初始状态

  1. 要注册任何事件处理程序,例如,当用户单击或修改DOM元素时,您可以更改关联的可观察对象的状态

关键是第二点:如果绑定处理某种事件,它将修改可观察的值,这就是您认为“双向绑定”的“反向”。

因此,处理事件以将可观察的工作更新为“双向”绑定的任何绑定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章