バインディングで追加情報を取得しようとしている場合は、関数を指している要素のバインディングの名前を参照するようにパラメーターを使用して設定します。関数リテラルを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(「fun」バインディングを持つ要素がどのように機能しないかに注意してください):
<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>
バインドの初期化を使用して標準のDOMイベントハンドラーを設定し、jQueryなどを使用してこれらの関数を明示的に呼び出すこともできます。ありがとうございました。良い一日。