2012-10-17 117 views
1

select從模板呈現,並且在DOM中不存在,直到調用renderGroups()Backbone.js事件綁定未觸發

我認爲事件綁定到視圖所以它不一定會在第一個選擇不存在於DOM中嗎?

我是新來backbone.js所以它可能是很明顯的:

var DirectoryView = Backbone.View.extend({ 
    el: $("table tbody"), 
    initialize: function(){ 
     // Populate our collection 
     this.collection = new Directory(contacts); 

     // Get our unique groups 
     var groups = this.getGroups(); 
     this.renderGroups(groups); 
    }, 

    renderGroups: function(groups) { 
     var group = $("#groups"); 

     var groupView = new GroupView({ 
      model: {groups: groups} 
     }) 

     group.append(groupView.render().el) 

    }, 

    events : { 
     "change select" : "select" 
    }, 

    select: function(e) { 
     console.log("hello") 
    }, 

    getGroups: function() { 
     // Pluck all the group properties from our array of contacts and return the unique groups 
     return _.uniq(this.collection.pluck("group"), false, function(group){ 
      return group.toLowerCase(); 
     }); 
    } 
}); 

模板

<script id="group-option-tmpl" type="text/template"> 
     <option value="all">All</option> 
     <% _.each(groups, function(group) { %> 
      <option value="<%= group %>"><%= group %></option> 
     <% }); %> 
    </script> 

的jsfiddle

http://jsfiddle.net/BDgMu/1/

+0

如果將'renderGroups'重命名爲'render',會發生什麼? – jsalonen

+0

@jsalonen我可以檢查,但render()函數實際上呈現一些聯繫人。 DirectoryView是一個「主」視圖。 – JonWells

回答

0

看起來像$("#groups")不在DirectoryView.el內。我想$('#groups')select

+0

$(「#groups」)是選擇插入的包裝div – JonWells

+0

包裝是否位於'$(「table tbody」)'內?你的'select'標籤在哪裏? –

+0

啊,不,它不是... – JonWells