使 KnockoutJs 默认将所有视图模型绑定到 $Data

Make KnockoutJs bind all viewmodels to $Data by default

在我的申请中,我经常这样做

data-bind="handler:method.bind($data)"

因为我希望被调用的方法中的 this 引用持有它的视图模型。有什么方法可以将它插入到 knockout 中,默认情况下它总是将方法绑定到当前绑定的 $data?

这里有几个thoughts/ideas:

  • clickevent 绑定会自动为您执行此操作。他们将调用 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.