如果您试图在绑定中获取额外信息,请使用并设置参数以引用指向函数的元素中的绑定名称。要么将函数文字放在 HTML 中,要么确保您可以在处理程序定义的范围内找到该函数(如全局附加到对象)。allBindings.get(
nameOfOtherBinding
)
nameOfOtherBinding
window
http://knockoutjs.com/documentation/custom-bindings.html
JS 小提琴示例 - http://jsfiddle.net/pqb4xubg/
将设置处理程序的 javascript(在init或update中):
ko.bindingHandlers.generic = {
init: function(element, valueAccessor, allBindings){
var val = 'nothing';
// set your other bindings to get pulled in
var func = allBindings.get('func');
// normal check if the binding is actually a function
if(typeof func === 'function'){
// use the retrieved function
val = func(valueAccessor());
}
element.innerText = val;
}
};
var model = {a:'4', b:5};
ko.applyBindings(model);
将使用处理程序的 html(请注意具有“有趣”绑定的元素如何不起作用):
<div data-bind="generic: a, func: function( val ){ return val + 2; }"></div>
<div data-bind="generic: a, fun: function( val ){ return val + 2; }"></div>
<div data-bind="text: a"></div>
<div data-bind="generic: b, func: function( val ){ return val + 2; }"></div>
<div data-bind="generic: b, fun: function( val ){ return val + 2; }"></div>
<div data-bind="text: b"></div>
您也可以只使用绑定的 init 来设置标准 DOM 事件处理程序,并使用 jQuery 之类的东西显式调用这些函数。谢谢你。再会。