2011-08-12 64 views
7

我想在Backbone.js中構建一個簡單的聯繫人編輯器應用程序,並且遇到了一些我不知道如何解決的問題,因爲我還不熟悉Backbone.js。如何顯示BackboneJS中Model屬性的選擇列表(下拉列表)?

我有一個Contact型號,該項目有一個字段ProductLineID(每個聯繫人都有一個與之關聯的產品線)。在顯示此聯繫人的編輯器時,我想顯示包含可能的ProductLine選項的下拉列表,並將其預設爲當前值。我將如何在Backbone.js中做到這一點?

我知道如何與數據綁定做到在knockout.js:

<select id="ProductLineID" name="ProductLineID" 
     data-bind="options: productLineOptions, 
     optionsValue: 'ID', 
     optionsText: 'Name', 
     value: ProductLineID, 
     optionsCaption: 'All'"> 
</select> 

在這個例子中productLineOptions是已經預裝在頁面上一個JSON對象。

這將完成我想要的,但我不知道如何做Backbone.js中的等價物。

我可以從我的實際示例中提供更多的代碼,但是這看起來像是一個簡單的示例,不需要特定的代碼。

+0

您是否實現了它?你如何設法顯示'Default Selected Value',即'value:ProductLineID'? – Shubh

回答

13

像下面將工作,如果你使用的underscore templates

<select id="ProductLineID" name="ProductLineID"> 
    <option value="">--select a product line--</option> 
    <% _(productLineOptions).each(function(pl) { %> 
     <option value="<%= pl.ID %>"><%= pl.Name %></option> 
    <% }); %> 
</select> 

然後你只需要確保你在productLineOptions對象到模板的情況下通過。

+0

有沒有一種方法可以將這與內置的骨幹視圖渲染相結合? – samandmoore

+1

骨幹的內置視圖渲染不會做任何事情,字面意思。所以你可以這樣做:(1)​​把上面的代碼放到你的'render'函數的模板(2)中,並用正確的上下文調用模板render:function(){this.template({productLineOptions:productLineOptions});返回這個; }' – satchmorun

+0

我在將'selected'屬性添加到模板中時遇到了另一個問題,但它始終選擇第一個,即使選擇了另一個選項。 – Kyleinincubator

4

Backbone.js不像數據綁定那樣進行數據綁定,就像Knockout一樣。無論如何,它將這一方面留給開發者去做。基本的方法是爲更改設置事件偵聽器。

如果你確實想做敲擊式數據綁定,有一個項目可以支持你所需要的。

https://github.com/derickbailey/backbone.modelbinding

+0

我知道主幹沒有提供相同類型的內聯數據綁定功能,但是有什麼建議的方法可以使用主幹完成相同的功能嗎?我可能會嘗試使用模型綁定插件,但對我來說,這不是一個真正的「主幹」方式來完成它。 – samandmoore