使 KnockoutJs 默认将所有视图模型绑定到 $Data
Make KnockoutJs bind all viewmodels to $Data by default
在我的申请中,我经常这样做
data-bind="handler:method.bind($data)"
因为我希望被调用的方法中的 this 引用持有它的视图模型。有什么方法可以将它插入到 knockout 中,默认情况下它总是将方法绑定到当前绑定的 $data?
这里有几个thoughts/ideas:
click
和 event
绑定会自动为您执行此操作。他们将调用 this
为 $data
的函数,并将 $data
作为第一个参数传递。我不确定您使用的是自定义绑定还是其他绑定。
您通常可以在视图模型中处理此问题,方法是在此处绑定您的函数,或者根据您的 preference/structure,您可以在变量中捕获 this
的值。
var ViewModel = function() {
this.myMethod = function() {
// use this
}.bind(this);
//or
var self = this;
this.myMethod2 = function() {
//use self instead of this inside your function
};
};
Knockout.punches plugin 也将有助于保持 this 的正确值,这样如果您执行 data-bind="click: $parent.someFunction"
它将正确调用函数 $parent
作为 this
.
在我的申请中,我经常这样做
data-bind="handler:method.bind($data)"
因为我希望被调用的方法中的 this 引用持有它的视图模型。有什么方法可以将它插入到 knockout 中,默认情况下它总是将方法绑定到当前绑定的 $data?
这里有几个thoughts/ideas:
click
和event
绑定会自动为您执行此操作。他们将调用this
为$data
的函数,并将$data
作为第一个参数传递。我不确定您使用的是自定义绑定还是其他绑定。您通常可以在视图模型中处理此问题,方法是在此处绑定您的函数,或者根据您的 preference/structure,您可以在变量中捕获
this
的值。var ViewModel = function() { this.myMethod = function() { // use this }.bind(this); //or var self = this; this.myMethod2 = function() { //use self instead of this inside your function }; };
Knockout.punches plugin 也将有助于保持 this 的正确值,这样如果您执行
data-bind="click: $parent.someFunction"
它将正确调用函数$parent
作为this
.