Knockout包装值绑定

mit*_*med 4 knockout.js

我正在使用mathias bynen的占位符代码,如果我像这样做一个简单的自定义绑定,我想和淘汰一起使用它:

ko.bindingHandlers.placeholder = {
    init: function (element) {
        $(element).placeholder();
    }
};
Run Code Online (Sandbox Code Playgroud)

和HTML

<input placeholder = "Line 1" data-bind="placeholder: {}, value: addressLine1">
Run Code Online (Sandbox Code Playgroud)

它有效,但我想将它们"合并"到一个自定义绑定中,以便像使用它一样

<input placeholder = "First Name" data-bind="placeholderValue: firstName">
Run Code Online (Sandbox Code Playgroud)

所以我尝试了这段代码:

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);
    }
};
Run Code Online (Sandbox Code Playgroud)

但它引起了我的兴趣

Uncaught TypeError: undefined is not a function 
Run Code Online (Sandbox Code Playgroud)

我还没有真正掌握ko

nem*_*esv 12

当你创建一个委托,你总是应该传入一个最佳实践的自定义绑定所有参数initupdate与内绑定,因为你永远不知道什么参数内绑定使用:

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);
    }
};
Run Code Online (Sandbox Code Playgroud)

你已经拿到了异常,因为init在的value招标使用allBindingsAccessor参数,而是因为你没有通过,在它引发异常.