2012-09-15 61 views
5

在我的意见我有:骨干事件不绑定到DOM元素

events: { 
    'click .tab': 'doSomething', 
}, 

则:

doSomething: function(){ 
    ... 
}, 

这是我的观点的重复结构,但由于某些原因,“DoSomething的'功能没有被这个视图中的点击触发。

何时将元素绑定到事件?

关于调试的任何提示?

回答

6

代表发生在视图构造函数末尾的delegateEvents方法期间。

http://documentcloud.github.com/backbone/docs/backbone.html#section-144

尝试手动调用this.delegateEvents()render返回this之前。您是否在initializerender方法中使用this.el以骨干网不期待的方式发送?

+1

嗯,我只是尝试在渲染返回之前调用this.delegateEvents(),但它仍然没有绑定事件。另外,我并没有在初始化或渲染中搞乱this.el。唯一有效的工作是调用var that = this;此$( '标签 ')上(' 点击',函数(){that.doSomething();});在初始化的内部,但这种感觉像不好的形式... – captDaylight

+0

我没有搞乱$ el或el,但是将delegateEvents添加到我的渲染器中修复了事件绑定。 – Duke

10

链接到这里拨弄:http://jsfiddle.net/7xRak/

省略选择器导致事件被绑定到视图的根元素(this.el)。

如果您class="tab"是视图,DOM元素意味着this.el那么你应该绑定事件作为

events : { 
    'click' : 'dosomething' 
} 

,并像

<div class="tab"> 
    <span class="inner"></span> 
</div> 

this.el内部元件,那么你应该绑定事件作为,

events : { 
     'click' : 'dosomething' 
     'click .inner' : 'onInnerClick' 
    } 

文件:http://backbonejs.org/#View-delegateEvents

+2

这正是我上面所展示的,我很清楚这种模式。我想说的是,这种模式由于某种原因不起作用,所以有什么方法来调试事件委派。 – captDaylight