2012-05-17 168 views
1

我有某種嚮導。我嘗試從json自動生成表格。我想在用戶點擊表格行後進入下一步。但我無法訂閱點擊事件。沒有事件發生。我可以訂閱行點擊嗎?無法訂閱onClick事件

//table element view class 
    var ObjectsTableView = Backbone.View.extend({ 
     tagName: 'tr', 
     id: 'table-item', 
     events:{ 
//no one works 
      'click tr' : 'onClick', 
      'click th' : 'onClick', 
      'click #some' : 'onClick' 
     }, 
     //configure underscore template 
     template: _.template('<th id="some"><%= f1 %></th><th><%= f2 %></th><th><%= f3 %></th>'),  
     onClick: function(){ 
      alert("click"); 
     }, 
     render: function(){ 
      //use template and assign to html 
      this.$el.html(this.template(this.model.toJSON())); 
      return this; 
     } 
    }); 

Objects在另一個View中插入DOM的視圖。出現在DOM這樣的:

<table class="table table-striped"> 
    <thead> 
     <tr> 
     <th>F1</th> 
     <th>F2</th> 
     <th>F3</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr id="table-item"> 
     <th id="some">f1</th> 
     <th>f2</th> 
     <th>f3</th> 
     </tr> 
    </tbody> 
    </table> 

但點擊錶行不會引發事件

回答

2

我認爲你的問題在於你是如何使用idtagName。如果指定id, tagName, className, or attributes properties

this.el從視圖的tagNameclassNameidattributes屬性創建,如果指定。如果不是,el是空的div

所以骨幹將創建<tr id="table-item"></tr>是在看你的this.el但你不插入即到DOM中的任何地方。你需要做這樣的事情:

$('table').append(v.render().el); 

某處以獲取您視圖的el到DOM,那麼你可以不選擇使用只是一個click事件:

events: { 
    'click': 'onClick' 
} 

演示(開放控制檯請):http://jsfiddle.net/ambiguous/nLTGv/

如果你已經有一個<tr id="table-item">在DOM,那麼你會希望在您的視圖定義中使用el,並再次,一個簡單的選擇少click前夕NT:

var ObjectsTableView = Backbone.View.extend({ 
    el: '#table-item', 
    events: { 
     'click': 'onClick' 
    }, 
    //... 

然後你this.el將是#table-item是已經在DOM。

演示:http://jsfiddle.net/ambiguous/7RYBJ/

+0

它出現在DOM中,但點擊不起作用。對不起,如果不清楚。我添加了部分DOM,問題 – Eugene

+0

而'點擊':'onClick'不工作,我在 – Eugene

+0

之前嘗試這個@kiwaa:如果它已經在DOM中,那麼你應該在你的視圖中使用'el',看看我的第二個演示。 –