我需要在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时,我希望它是未定义的。但传递了一个事件对象。
为什么会发生这种情况,我如何通过一个论点?
4条答案
按热度按时间xwmevbvl1#
另一种方法是使用一个完全不同的方法来处理点击,并调用“open”,这样它就可以被另一个进程调用。正如另一个人提到的,您在events hash中指定的方法是jquery委托 Package 器,所以您对params没有什么可做的,因为您将得到的是委托提供的。所以在这种情况下,创建另一个执行实际图标单击的方法,该方法将调用open:
q35jwt9p2#
您可以在此处看到:http://backbonejs.org/docs/backbone.html#section-156
最关键的一句话是:
因为 Backbone.js 的事件是jquery的委托(http://api.jquery.com/delegate/),所以传递的参数只是传递jquery的委托默认参数。
您可以像这样更新代码:
xbp102n03#
如果您知道ID变量的类型,则可以使用javascript
typeof()
来检查是否为true,或者可以使用UnderscoreJS中的_.isObject来检查ID是否为对象6kkfgxo04#
我认为Brendan或Fejustin的答案是最好的(实际上我投了他们的票),但是如果你真的只想拥有一个函数,你可以把
id
作为第二个参数,而忽略第一个参数。