2016-06-24 5 views
0

現在、私はMarionetteとBackboneを使っています。私はエンティティ:CompositeViewItemViewsのリストを持っています、すべてのItemViewはfirstnamelastnameのようなデータを持つモデルを持っています。Marionette ItemViewは2つのリソースからのデータを持っています

それぞれItemViewは、AJAX(別のエンドポイント!)経由でItemViewの新しいデータを取得するリンクで、[{"id": 1, "foo": "this is soo bar"}, {"id": 2, "foo": "a little bit of baz"}]のような追加データのリストでビューを更新する必要があります。そのデータをビューにレンダリングする必要があります(クリックすると再び削除できます)。

ここに行く最良の方法は何ですか? ItemView内に2番目のモデルを追加するか、既存のビューに新しいデータを追加しますか?それとも全く違う何か?私はすべての役に立つヒントをありがとう!ここで

マイソリューション(一種の)

は私がなってしまったものです:追加データのためのリンクがクリックされたときに、関連するItemViewは私が定義されBackbone.Collectionオブジェクトをinstanciates。そのコレクションには、エンドポイントのURLが格納されます。その後、私は(約)collection.fetch()メソッドを呼び出すと、次のようにアンダースコアでそのコレクションをレンダリング:

var tpl = _.template(dataTemplate); 
var html = tpl({ myData: {collection.models}); 

node.html(html); 

は私と一緒に考えるために皆さんありがとうございました:)解決するための様々な方法の

+0

*「すべてのItemViewにはfirstnameとlastnameのようなデータを持つモデルがあります」* - このデータはどこから来たのですか?エンドポイントなど何か? –

+0

正確に。アプリケーションはボタンクリックで開始され、AJAXエンドポイントを呼び出し、次にこの(JSON)データをレンダリングします。編集:しかし、そのエンドポイントは別のものです – Hando

+0

基本的に1つのitemviewの複数のモデルを持つことはできません –

答えて

0

バンチが、これはどのような私ですからのビューに余分なデータを取得するには

テンプレートヘルパー

var View = Mn.ItemView.extend({ 
    templateHelpers: function() { 

     // Each property will be available in the template 
     return { 
      extraData: 'my data', 
      anotherModel: this.getOption('secondModel').toJSON(), 
      someOtherData: '' 
     } 
    } 
}); 

new View({model: MyModel, secondModel: SecondModel}); 

を好みます親、チェックアウトchildViewOptions

あなたのデータの外観では、その項目の配列。したがって、CompositeViewchildViewCollectionView

関連する問題