2013-04-15 32 views
1

好,所以在我的ViewModels我经常创造这样的功能检索KO功能event.target与其他变量

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让我失望。任何人都想给我一颗骨头?谢谢!

+0

这些变量会在应用程序内保持不变吗?如果是这样,你可以尝试[this](http://stackoverflow.com/questions/12751387/knockout-js-binding-a-button-to-an-item-in-a-collection/12751799#12751799)。 –

+0

你可以发布你的'updateSomething'函数的示例调用它在HMTL中的样子吗? – nemesv

回答

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

+0

谢谢Francesco,指出还有其他方法可以实现这一点。在这种情况下,自定义绑定处理程序将执行此技巧。 – Phil