Knockout包装值绑定

时间:2013-08-02 11:14:04

标签: knockout.js

我正在使用mathias bynen's placeholder code,如果我像这样做一个简单的自定义绑定,我想将它与淘汰一起使用:

ko.bindingHandlers.placeholder = {
    init: function (element) {
        $(element).placeholder();
    }
};

和html

<input placeholder = "Line 1" data-bind="placeholder: {}, value: addressLine1">

它有效,但我想将它们“合并”到一个自定义绑定中,以便像

一样使用它
<input placeholder = "First Name" data-bind="placeholderValue: firstName">

所以我尝试了这段代码:

ko.bindingHandlers.placeholderValue = {
    init: function (element, valueAccessor) {
        $(element).placeholder();
        ko.bindingHandlers.value.init(element, valueAccessor);
    },
    update: function (element, valueAccessor) {
        ko.bindingHandlers.value.update(element, valueAccessor);
    }
};

但它引起了我的兴趣

Uncaught TypeError: undefined is not a function 

我还没有真正掌握ko

1 个答案:

答案 0 :(得分:12)

当您创建委派自定义绑定作为最佳实践时,您应始终将initupdate的{​​{3}}传递给内部绑定,因为您永远无法知道哪些参数内部绑定使用:

ko.bindingHandlers.placeholderValue = {
    init: function (element, valueAccessor, allBindingsAccessor, 
                    viewModel, bindingContext) {
        $(element).placeholder();
        ko.bindingHandlers.value.init(element, valueAccessor, 
             allBindingsAccessor, viewModel, bindingContext);
    },
    update: function (element, valueAccessor, allBindingsAccessor, 
                     viewModel, bindingContext) {
        ko.bindingHandlers.value.update(element, valueAccessor, 
             allBindingsAccessor, viewModel, bindingContext);
    }
};

您有异常,因为init biding的value使用allBindingsAccessor参数,但因为您没有通过该参数会引发异常。