2011-10-04 75 views
3

看起來好像下面的代碼正在進入initialize內部,但我的事件看起來並未觸發。無法獲取Backbone.js查看要觸發的事件

我在這裏錯過了什麼?

var index = (function ($, window, document) { 

    var methods = {}; 

    methods = { 
      init: function() { 

      }, 

      getView: Backbone.View.extend({ 
       el: $('.settings'), 

       events: { 
       'click .settings': 'addUl' 
       }, 

       initialize: function() { 
        console.log('init'); 
       }, 

       render: function() { 
       }, 

       addUl: function() { 
       console.log('addUI'); 
       this.el.append("<ul> <li>hello world </li> </ul>"); 
       } 
      }) 
    }; 

    return methods; } (jQuery, window, document)); 

var stuff = new index.getView();

鏈接到jsbin

回答

3

'click .settings'

+0

這有效,但爲什麼在文檔中它寫'點擊.blah' http://documentcloud.github.com/backbone/#View-delegateEvents –

+0

好問題,我開始懷疑我的評論可能是副作用並不是一個合適的解決方案。當我有一些時間時,我會進一步研究它,除非有人回答。 – JaredMcAteer

3

其實完全刪除.settings刪除的空間。

'click .settings'正在註冊與this.el匹配的'.settings'的後代的點擊處理程序。

在你的例子中,你想直接在this.el上註冊一個事件,所以你不需要後代選擇器。

3

問題是,它是您的視圖元素($el)具有settings類,而不是孩子。

click .settings通知骨幹綁定$el上的「點擊」事件,對於任何有.settings的孩子。但是,因爲它是$el,它具有類別settings綁定永不匹配。

這就是爲什麼當你刪除.settings它的作品,因爲你說「任何‘點擊’在$ EL」

的文件說click .blah的原因是因爲它假定HTML元素(S)與class='blah'$el元素的子代。

希望得到這個幫助。