KnockoutJS中的自定义绑定

时间:2018-04-16 17:23:13

标签: javascript knockout.js ecmascript-5 knockout-3.0

我刚开始使用KnockoutJS并遇到自定义绑定问题。我将一个observable分配给自定义绑定,并通过输入字段更改该observable。另一个文本字段已经对更改做出反应,但某种程度上更新不会被触发。

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

1 个答案:

答案 0 :(得分:0)

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

只需访问它,例如:

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>