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>
只是因为你从不访问绑定中的 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>
我刚开始使用 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>
只是因为你从不访问绑定中的 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>