2012-09-05 98 views
2

我與骨幹的工作,這是靜態的數據,我有:骨幹:用相同的數據填充多個下拉菜單?

var emailfields = new EmailFields([ 
    new EmailField({ id: "data-email", name: "Email" }), 
    new EmailField({ id: "data-first-name", name: "First Name" }), 
    new EmailField({ id: "data-last-name", name: "Last Name" }), 
]); 

我想創建N(N> 1)填入相同的數據(emailfields)下拉列表。如果選擇了任何值,我想通知用戶他不能再次選擇相同的字段。

這是我的看法:

EmailFieldSelectView = Backbone.View.extend({ 

    initialize: function() { 
     _.bindAll(this, "addSingleEmailField", "add"); 
     this.add(); 
    }, 

    addSingleEmailField: function(emailfield) { 
     $("select").each(function() { 
      $(this).append(new EmailFieldView({ model: emailfield}).render().el); 
     }); 
    }, 

    add: function() { 
     this.collection.each(this.addSingleEmailField); 
    }, 

}); 

這是我的初始化:

window.emailview = new EmailFieldSelectView({ 
    collection: emailfields 
}); 

爲了填充每個我使用$( 「選擇」)相同的數據選擇。

有沒有更好的方法來做到這一點(我覺得這看起來像一個黑客)?

謝謝。

回答

1

你有什麼似乎是一種合理的方式來處理事情。您可以使用模板來減少javascript,並需要一個視圖來創建選擇列表選項。

<script type="text/template" id="exampleTemplate"> 

    <select id="list1"> 
    <% _(emailFields).each(function(emailField) { %> 
    <option value="<%= emailField.id %>"><%= emailField.name %></option> 
    <% }); %> 
    </select> 

    <select id="list2"> 
    <% _(emailFields).each(function(emailField) { %> 
    <option value="<%= emailField.id %>"><%= emailField.name %></option> 
    <% }); %> 
    </select> 

    etc. 

</script> 

然後視圖變得 -

EmailFieldSelectView = Backbone.View.extend({ 
    template: _template($('#exampleTemplate').html()); 

    initialize: function() { 
     _.bindAll(this, "addSingleEmailField", "add"); 
     this.render(); 
    }, 

    render: function() { 
    this.$el.html(this.template({ emailFields: this.collection.toJSON() })); 
    return this; 
    } 

});