Javascript 将参数传递到主干视图的主干事件对象

Javascript 将参数传递到主干视图的主干事件对象,javascript,backbone.js,Javascript,Backbone.js,我有以下事件作为主干视图。这是一个产品视图,有三个选项卡(“全部”、“前3”、“前5”) 我是否可以通过某种方式将参数传递到方法声明中,使其等效于以下内容(这不起作用) 您可以将额外的参数放在可单击项的数据属性中;大概是这样的: <a id="top-all" data-pancakes="1"> events : { "click #top-all": function(){this.topProducts(1);} "click #top-three": f

我有以下事件作为主干视图。这是一个产品视图,有三个选项卡(“全部”、“前3”、“前5”)

我是否可以通过某种方式将参数传递到方法声明中,使其等效于以下内容(这不起作用)


您可以将额外的参数放在可单击项的数据属性中;大概是这样的:

<a id="top-all" data-pancakes="1">
events : {
   "click #top-all":    function(){this.topProducts(1);}
   "click #top-three":  function(){this.topProducts(2);}
   "click #top-ten":    function(){this.topProducts(3);}
},
topProducts(obj){
   // Do stuff based on obj value
}

您可以做的只是检查作为参数中的currentTarget接收的元素的id

topProduct: function (e) {
    var id = e.currentTarget.id;
    if (id == "top-all") // Do something
    else if (id == "top-5") // Do something
    else if (id == "top-3") // Do something
}

可以使用闭包执行此操作:

EventObject.on(event, (function(){
    var arg = data; // Closure preserves this data
    return function(){
        doThis(arg);
    }   
})());

我通常喜欢这样做:

<a id="top-all" data-pancakes="1">
events : {
   "click #top-all":    function(){this.topProducts(1);}
   "click #top-three":  function(){this.topProducts(2);}
   "click #top-ten":    function(){this.topProducts(3);}
},
topProducts(obj){
   // Do stuff based on obj value
}

“this”指向此处的主干视图,因此执行直接$(this)不会给出与单击的元素对应的DOM元素。@papdel:对,很抱歉。但是您可以使用
ev.target
(其中
ev
是事件)。请看一看我的固定版本。@papdel:是的,
ev.target
(当你不能依赖
这个
)与数据属性相结合是跟踪事物的好方法。@whistler:
{'click#top all':'topProducts','click#top three':'topProducts',…}
。我可以说,对于本应非常简单的事情来说,这是非常复杂的。从backbone.js的制作者那里减去5分。这实际上比选择的答案要好,因为它不需要对DOM进行任何修改。这个答案比添加不必要的数据属性要好得多。如果您想获得类,请使用
e.currentTarget.className
而不是
e.currentTarget.id
。另外,在
e
object中有很多有趣的属性@DavidCorral如果您查看OP给出的示例,那么单击处理程序所附加的所有元素上都会提到一个Id。我同意你关于事件对象有趣属性的观点。很棒的东西!!最简单的往往是最好的。我喜欢!