我对knockout.js的自定义绑定中的以下行为感到难过:
ko.bindingHandlers.customBinding = {
update: function(element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
console.log( JSON.stringify(value) );
}
}
ko.applyBindings({
someText: ko.observable("inital value")
});
和
<input type="text" data-bind="value: someText, customBinding: {some: 'option'}">
valueAccessor()
应该给我视图模型属性,该属性绑定到元素的值(即可观察的someText
)。引用文档:
valueAccessor
- 一个JavaScript函数,您可以调用它来获取此绑定中涉及的当前模型属性。在不传递任何参数的情况下调用此方法(即调用valueAccessor()
)以获取当前模型属性值。
然而,真正所做的是返回绑定值,即{some: 'option'}
。
我错过了什么?
答案 0 :(得分:1)
您需要在自定义绑定调用中为valueAccessor传递所需的模型属性。在您的情况下,您需要模型属性'someText':
<input type="text" data-bind="value: someText, customBinding: someText">
答案 1 :(得分:1)
您正在混淆一点 - valueAccessor 参数可以访问绑定的值 (就像您已经发现的那样)。
另一方面,“值”绑定只是另一种绑定,甚至可能不会出现在应用你的元素上 - 或者根本不存在(例如在div上)。
如果你真的想要访问绑定到 value 绑定的属性(最有可能的话,你可能想重新考虑你的绑定处理程序),你可以通过 allBindingsAccessor 参数,如:
ko.utils.unwrapObservable(allBindingsAccessor().value);