2011-08-12 4 views
7

私はBackbone.jsに簡単な連絡先エディタアプリケーションを構築しようとしていますが、私はBackbone.jsにまだ慣れていないので解決方法がわからないという問題があります。BackboneJSのModelプロパティの選択リスト(ドロップダウン)を表示するにはどうすればよいですか?

モデルContactがあり、その項目にはフィールドProductLineID(各連絡先には関連付けられている商品ラインがあります)があります。この連絡先のエディタを表示する際、可能なProductLineオプションを含むドロップダウンリストを表示し、それを現在の値にプリセットしたいと考えています。 Backbone.jsでどうすればいいですか?

私はデータバインディングとknockout.jsでそれを行う方法を知っている:この例のproductLineOptionsで

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

はすでにページにプリロードされた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は、ノックアウトのように、データボックスから取り出したデータを出力しません。しかし、彼らは望むことを行うには、開発者にその側面を残します。基本的な方法は、変更のイベントリスナーを設定することです。

ノックアウトスタイルのデータバインディングを行いたい場合は、必要なものをサポートするプロジェクトがあります。

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

+0

バックボーンは同じ種類のインラインデータバインド機能を提供していないと理解していますが、バックボーンを使用して同じことを達成する方法はありますか?私はおそらくmodelbindingプラグインに試してみるつもりですが、それは本当に "バックボーン"の方法ではありません。 – samandmoore

関連する問題