Knockout.js具有双向绑定,实时示例展示了value
绑定(应用于文本输入时)如何更新视图模型。
但是,我尝试更新其他绑定(例如text
),发现该视图不会更新viewmodel。请参见以下示例:http : //jsfiddle.net/w7t89tuu/
从淘汰赛的文档中尚不清楚它们的某些绑定是否双向,而其他绑定不是。视图在什么条件下可以更新视图模型?
双向绑定:所有一般用户可以直接更改,无需特殊脚本的帮助,如表单控件的值或状态相关的东西绑定:value
,hasFocus
,textInput
,checked
,selectedOptions
。或与用户可以更改的内容相关的任何自定义绑定(将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元素设置任何初始状态
- 要注册任何事件处理程序,例如,当用户单击或修改DOM元素时,您可以更改关联的可观察对象的状态
关键是第二点:如果绑定处理某种事件,它将修改可观察的值,这就是您认为“双向绑定”的“反向”。
因此,处理事件以将可观察的工作更新为“双向”绑定的任何绑定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句