Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将参数传递给backbone.js中绑定在events对象中的函数_Javascript_Backbone.js_Backbone Views - Fatal编程技术网

Javascript 如何将参数传递给backbone.js中绑定在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

我需要在主干中的events对象中使用函数的参数

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);
}

这是相关的,这里的过程是什么