1

好的,所以在我的视图模型中,我经常创建诸如

self.updateSomething = function(data, event){

    var theElem = $(event.target); 

    //do stuff with the elem

}

效果很好,没有问题。我遇到的问题是我还想将一个值传递给我的函数。

self.updateSomething = function(myVar, data, event){

    var theElem = $(event.target); 

    //do stuff with the theElem AND myVar

}

但这不起作用。看起来很简单,我确定这只是一个语法问题,但我无法弄清楚,GOogle 让我失望了。有人想给我扔骨头吗?谢谢!

4

1 回答 1

3

您是否尝试使用该.bind功能?

例如,在您的 .html

<span data-bind="text: test, click: updateSomething.bind($data,'a variable','another variable') "></span>

在您的视图模型中:

var vm = function () {
    var self = this;
    self.test = ko.observable('ciao');

    self.updateSomething = function (myVar1, myVar2, data, event) {

        var theElem = $(event.target);

        //do stuff with the theElem AND myVar

    }
}

我还建议您使用另一种方法,使用自定义绑定处理程序:

在您的 html 中:

  <span data-bind="myHandler : {var1:'variable1', var2:'variable2'}"></span>

在你的 js 文件中:

ko.bindingHandlers.myHandler =   {

    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var theElem = $(element);
        var variables =valueAccessor();
        var var1 =  variables.var1;

    }
}

第二种方法允许您编写更具可读性和可重用性的代码;此外,我个人更喜欢在自定义绑定处理程序中保留对 DOM ( ) 的所有访问$(...),以便更好地分离关注点。在这里你可以找到一个例子:jsfiddle

于 2013-04-15T08:39:19.570 回答