2

我对 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() 应该给我绑定到元素值的视图模型属性(即 observable someText)。引用文档:

valueAccessor— 一个 JavaScript 函数,您可以调用它来获取此绑定中涉及的当前模型属性。在不传递任何参数的情况下调用它(即 call valueAccessor())以获取当前模型属性值。

然而,它真正做的是返回绑定值,即{some: 'option'}.

我错过了什么?

http://jsfiddle.net/j5y8H/

4

2 回答 2

1

您需要在自定义绑定调用中为您的 valueAccessor 传递所需的模型属性。在您的情况下,您需要模型属性 'someText' :

<input type="text" data-bind="value: someText, customBinding: someText">

http://jsfiddle.net/j5y8H/1/

于 2013-03-21T13:06:22.943 回答
1

您有点混淆了- valueAccessor参数可以访问绑定的值(就像您已经发现的那样)。

另一方面,“值”绑定只是另一个绑定,它甚至可能不存在于应用您的元素的元素上 - 或者根本无效(例如,在 div 上)。

如果您真的想访问绑定到绑定的属性(并且很可能如果您这样做,您可能想重新考虑您的绑定处理程序),您可以通过allBindingsAccessor参数来实现,如下所示:

ko.utils.unwrapObservable(allBindingsAccessor().value);
于 2013-03-21T13:31:20.460 回答