首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些Knockout.js绑定是“双向”的?

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

Stack Overflow用户
提问于 2015-05-05 14:15:35
回答 2查看 4.8K关注 0票数 4

Knockout.js拥有双向绑定,活生生的例子如何使用value绑定(当应用于文本输入时)更新视图模型。

但是,我尝试更新其他绑定(如text),发现视图没有更新视图模型。参见本例:http://jsfiddle.net/w7t89tuu/

从“淘汰赛”的文档来看,目前还不清楚它们的一些绑定是双向的,而另一些则不是。在什么情况下视图可以更新视图模型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-05 23:16:15

简短回答

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

单向绑定:用户不能直接更改的所有状态,例如visible。用户不能直接更改可见性:必须通过脚本完成。在这种情况下,脚本不应该更改DOM元素本身的可见性,而应该更改可观察到的绑定。第一个将不会更新可观察到的内容,但后者将更新绑定元素的可见性。

长答案

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

代码语言:javascript
复制
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函数。init有两种主要用途: 1.为DOM元素设置任何初始状态

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2015-05-05 14:25:25

您的问题是,您没有更新可观察到的值,而是直接修改元素的文本。如果直接更新同样的事情也发生了元素的值,则根本没有修改可观察的值。如果要更新可观测值,可以使用:

代码语言:javascript
复制
this.changeName = function() {
    this.name('Bob');
};

JSFiddle演示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30055507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档