KnockoutJS 中的自定义绑定

Custom Bindings in KnockoutJS

我刚开始使用 KnockoutJS,运行 遇到了自定义绑定问题。我将一个可观察对象分配给自定义绑定并通过输入字段更改该可观察对象。另一个文本字段已经对更改做出反应,但不知何故没有触发更新。

ko.bindingHandlers.someBinding = {
  update: function(element, valueAccessor) {
    console.log("B");
  }
}

function myModel() {
  this.lastname = ko.observable("name");
}

ko.applyBindings(new myModel());

...

<p data-bind="text: lastname"></p>
<input data-bind="value: lastname" />
<p data-bind="someBinding: lastname" ></p>

https://jsbin.com/kupitepaxe/1/edit?html,js,console,output

只是因为你从不访问绑定中的 observable,所以 KO 认为你不需要那个 observable。

访问即可,例如:

var currentValue = ko.unwrap(valueAccessor());

通常情况下,您会将其作为绑定处理程序的一部分来完成,因为通常您需要该值,但您的初始测试没有这样做,这就是您没有获得预期结果的原因。

实例:

ko.bindingHandlers.someBinding = {
  update: function(element, valueAccessor) {
    console.log("B");
    ko.unwrap(valueAccessor());
  }
}

function myModel() {
  this.lastname = ko.observable("name");
}

ko.applyBindings(new myModel());
<p data-bind="text: lastname"></p>
<input data-bind="value: lastname" />
<p data-bind="someBinding: lastname" ></p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>