2013-01-18 4 views
11

マリネット複合ビューテンプレートにパラメータを取得する方法はありますか?私は、ビューで初期化されたパラメータがテンプレートで利用可能になると考えましたが、うまくいかないようです。backbone marionetteコンポジットビューテンプレートにパラメータを渡す方法

Views.myView = Marionette.CompositeView.extend({ 
    template: '#myView', 
    otherstuff... 
}); 


var collection = new App.Collection(); 
App.main.show(new Views.myView({ 
    collection: collection, 
    isMine: true 
})); 

テンプレート:

<%= isMine %> 

、テンプレートがレンダリングされるときisMineが未定義:

答えて

17

あなたはこのためにtemplateHelpers機能を使用することができます

Views.myView = Marionette.CompositeView.extend({ 
    template: '#myView', 
    serializeData: function() { 
     var viewData = {}; 
     viewData.isMine = this.options.isMine === undefined ? true : this.options.isMine; 
     return viewData; 
    }, 
    otherstuff... 
}); 
+1

+1これは正しい方法です。もし誰かが不思議だったら、関数ではなく、templateHelpersに直線オブジェクトを渡すこともできます: –

+0

オブジェクトを渡すと "this"キーワードに直接アクセスすることはできません。 (申し訳ありませんが、私のコメントを編集することはできません!) –

6

はこれを理解するためにfreenodeのチャットルームでのブライアン・マンからいくつかの助けを得ました。ビューに値を渡しましたが、serializeDataメソッドをオーバーライドすることで、プロパティとして実際のテンプレートに送信する必要があります。

また、デフォルトをtrueに設定するためのチェックも行います。そうしたくない場合は値を渡す必要はありません。

-2

あなたはビュー「:{isMine真}モデル」のモデルプロパティを設定することができます。たとえば、レンダリング時に異なる領域を塗りつぶすレイアウトがあります。

onRender: function() { 
      var contactInfo = this.model.get('contactInfo'); 

      this.contactInfoRegion.show(new ContactInfoView(
       { 
        model: contactInfo, 
        travelerNumber: this.travelerNumber, 
        numberOfTravelers: this.numberOfTravelers 
       } 
      )); 
} 

var ContactInfoView = Backbone.Marionette.ItemView.extend({ 
     model: ContactInfoModel, 
     template: Backbone.Marionette.TemplateCache.get(contactInfoTemplate), 
     templateHelpers:function(){ 

      return { 
       numberOfTravelers: this.options.numberOfTravelers, 
       travelerNumber: this.options.travelerNumber 
      } 
     } 
    }); 
関連する問題