從淘汰賽文檔:knockoutjs custum綁定預處理方法和addBindingCallback?
ko.bindingHandlers.<name>.preprocess(value, name, addBindingCallback)
參數:
值:...
名:...
addBinding:您可以選擇使用回調函數在當前元素上插入另一個綁定。這需要兩個參數,名稱和值。例如,在預處理函數中,調用addBinding('visible', 'acceptsTerms()');
以使Knockout的行爲與該元素上綁定了visible: acceptsTerms()
一樣。
例如,我們可以有這樣的綁定:
ko.bindingHandlers.live = {
preprocess: function (str, name, addBindingCallback) {
addBindingCallback('value', str);
addBindingCallback('valueUpdate', "'afterkeydown'")
}
};
// Or
ko.bindingHandlers.log = {
preprocess: function (str, name, addBindingCallback) {
addBindingCallback('click', "function(){console.log('test');}");
}
};
我的問題:
是否有可能通過preporcess
方法的新添加的綁定範圍內的變量?
ko.bindingHandlers.log = {
preprocess: function (str, name, addBindingCallback) {
// an object which is not in my viewmodel and context
var $scoped_obj = get_from_some_external_service(str);
// i want to pass `$scoped_obj` to the newly added click binding
addBindingCallback('click', "function(){console.log($scoped_obj);}");
}
};
這可能嗎?如何 ?
我不認爲這應該是你應該努力做的事情,至少在預處理調用中。 「preprocess」調用中發生的事情應該是你可以直接添加到你的視圖恕我直言的東西。如果你正在進行計算,那麼這些計算應該通過視圖模型完成,否則直接在綁定處理程序中完成。 – 2014-10-29 22:25:06