在绑定处理程序的init
和update
部分之间共享变量的最佳方法是什么?
ko.bindingHandlers.someBinding = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
// declare something here
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
// use the variable here
}
}
我确信我不想污染视图模型本身。
我可以通过jQuery.data()
将它附加到元素上,但这感觉非常难看。
答案 0 :(得分:4)
knockout.js中的自定义绑定仅创建一次,因此这意味着如果存储一些局部变量,它将被重用于使用绑定的每个元素。如果这不是你的问题,下面是如何实现这一目标的一种方法。
Knockout绑定要求您返回包含方法init
和update
的对象。您可以使用示例中显示的对象文字,但可以使用其他模式,例如revealing module pattern:
// instead of using object literal, use IIFE (immediately invoked function expression:
ko.bindingHandlers.someBinding = (function(){
// define your local variables, functions and anything else you need
// keep in mind that the same variables will be re-used for EVERY
//element where the binding is used
var yourVariable = 0,
// declare init and update methods
init = function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
alert(yourVariable); // displays 0
yourVariable += 1;
},
update = function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
alert(yourVariable); // displays 1
};
// return object literal with methods init and update
return {
init: init,
update: update
};
}()); // execute the function