我正在使用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
答案 0 :(得分:12)
当您创建委派自定义绑定作为最佳实践时,您应始终将init
和update
的{{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
参数,但因为您没有通过该参数会引发异常。