如何将参数传递给backbone.js中events对象中绑定的函数

6uxekuva  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(166)

我需要在Backbone中的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
    }
});

现在让open的定义为:

function open(id) {
    if (id) {
      // do something
    } else {
      // do something else
    }
}

我将从另一个函数调用open,并在调用时传递id。因此,根据是否传递id,我需要做不同的事情。我如何在Backbone中做到这一点?目前,通过click调用id时,我希望它是未定义的。但传递了一个事件对象。
为什么会发生这种情况,我如何通过一个论点?

xwmevbvl

xwmevbvl1#

另一种方法是使用一个完全不同的方法来处理点击,并调用“open”,这样它就可以被另一个进程调用。正如另一个人提到的,您在events hash中指定的方法是jquery委托 Package 器,所以您对params没有什么可做的,因为您将得到的是委托提供的。所以在这种情况下,创建另一个执行实际图标单击的方法,该方法将调用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
    }
}
q35jwt9p

q35jwt9p2#

您可以在此处看到:http://backbonejs.org/docs/backbone.html#section-156
最关键的一句话是:

this.$el.delegate(selector, eventName, method);

因为 Backbone.js 的事件是jquery的委托(http://api.jquery.com/delegate/),所以传递的参数只是传递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
}
......
xbp102n0

xbp102n03#

如果您知道ID变量的类型,则可以使用javascript typeof()来检查是否为true,或者可以使用UnderscoreJS中的_.isObject来检查ID是否为对象

6kkfgxo0

6kkfgxo04#

我认为Brendan或Fejustin的答案是最好的(实际上我投了他们的票),但是如果你真的只想拥有一个函数,你可以把id作为第二个参数,而忽略第一个参数。

open : function(evt, id){
  if(id){
     //whatever
  } else {

  }
},

someOtherMethod : function(){
  this.open(null, id);
}

相关问题