我对以下行为在自定义绑定knockout.js的难倒:定制结合valueAccessor有意想不到的结果
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'}
。
我错过了什么?
啊我明白了。这就说得通了。它没有按照我预期的方式工作,但它与'value'绑定工作的方式一致。这与文档说明它的方式不一致。 'valueAccessor'将是您在绑定中传递的任何内容,不一定是“当前模型属性”。谢谢。 – Tomalak 2013-03-21 13:25:39
是的。你传给你的任何东西都可以从allBindingsAccessor中获取。我已经做了一个快速示例,我在这里传递了一个名为'source'的属性中的字符串:http://jsfiddle.net/j5y8H/3/(或者您可以拿起Grim指出的'value'属性) – 2013-03-21 13:38:01