2012-10-17 92 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