Javascript 如何将参数传递给backbone.js中绑定在events对象中的函数
我需要在主干中的events对象中使用函数的参数Javascript 如何将参数传递给backbone.js中绑定在events对象中的函数,javascript,backbone.js,backbone-views,Javascript,Backbone.js,Backbone Views,我需要在主干中的events对象中使用函数的参数 var DocumentRow = Backbone.View.extend({ tagName: "li", className: "document-row", events: { "click .icon": "open", "click .button.edit": "openEditDialog", "click .button.delete": "destr
var DocumentRow = Backbone.View.extend({
tagName: "li",
className: "document-row",
events: {
"click .icon": "open",
"click .button.edit": "openEditDialog",
"click .button.delete": "destroy"
},
render: function () {
// do something
}
});
现在让开放的定义为:
function open(id) {
if (id) {
// do something
} else {
// do something else
}
}
我将从另一个函数调用open,并在调用它时传递id。所以根据我是否通过id,我需要做不同的事情。如何在主干中执行此操作?
目前,通过单击调用id时,我希望它未定义。但是传递了一个事件对象
为什么会发生这种情况?我如何传递参数?如果您知道ID变量的类型,可以使用javascript
typeof()
检查是否为true,或者您可以检查ID是否为带下划线的object您可以在这里看到:
最关键的一句话是:
this.$el.delegate(selector, eventName, method);
因为主干的事件是jquery的委托(),所以传递的参数只是jquery的委托默认参数
您可以按如下方式更新代码:
......
open : function(event) {
//get id from event
var id = event.xxx ;//pseudo code
if (id) {
this.openid(id);
} else {
// do something else
}
},
//your another function direct call openid
openid: function(id){
// do something
}
......
另一种方法是使用一种完全不同的方法来处理单击,并调用“open”,以便其他进程可以调用它。正如另一个人提到的,您在事件散列中指定的方法是jquery委托包装器,因此对于参数您可以做的不多,因为您将得到的是委托提供的内容。因此,在这种情况下,创建另一个方法来执行实际的图标单击,以调用open:
events: {
"click .icon": "open",
"click .button.edit": "openEditDialog",
"click .button.delete": "destroy"
},
/**
* Specifically handles the click and invokes open
*/
handleIconClick : function(event) {
// ...process 'event' and create params here...
this.open(params);
},
/**
* This can be called remotely
*/
open : function(id) {
if (id) {
// do something
} else {
// do something else
}
}
我认为布伦丹或费贾斯汀的答案是最好的(实际上我投了他们的票)。但是,如果您真的致力于只使用一个函数,则可以将
id
作为第二个参数,而忽略第一个参数
open : function(evt, id){
if(id){
//whatever
} else {
}
},
someOtherMethod : function(){
this.open(null, id);
}
这是相关的,这里的过程是什么