2013-05-28 11 views
12

私はMarioette CompositeViewを使用してhtmlテーブルをレンダリングしています。よく働く!今コレクションにレコードがないときにメッセージを表示したいと思います。私は現在、このメッセージをレンダリングするためにemptyViewプロパティを使用しています。ただし、メッセージは表のラッパーに表示され、表の列ヘッダーは引き続き表示されます。正確には私が望むものではありません。理想的には、テーブルを非表示/削除して空のレコードビューを表示し、レコードが追加されたときに表示するのが理想的です。私はこれを処理するための最良のアプローチを見つけるのに苦労しています。そこに何か提案はありますか?Marionette CompositeViewで空のビューを表示

EmptyView = Marionette.ItemView.extend({ 
template: "#empty-template" 
}); 

SupportMemberView = Marionette.ItemView.extend({ 
template: "#member-template" 
}); 

SupportTeamView = Marionette.CompositeView.extend({ 
template: "#support-team-template", 
itemView: SupportMemberView, 
emptyView: EmptyView, 
itemViewContainer: 'tbody' 
}); 
+1

あなたはいくつかのコードを投稿することができます。このように、あなたの複合ビューは、あなたが「_.isEmpty()」機能を交換するunderscore.jsライブラリまたは同等へのアクセス権を持っていると仮定すると、以下のように定義されるでしょうか? –

答えて

5

emprtyビューでは、テーブルを非表示にするためにonRender関数を使用できます。この関数はレンダリング関数の後に呼び出されるので、domを操作して望み通りに見えるようになります。

+0

私はそのオプションを見ていましたが、私がBackbone/Marionetteを初めて使ったので、私が紛失していたものがあるかどうか聞いてみることにしました。 – Gentenator

+0

私は正しいシナリオだと思うし、その機能の理由はこの種のニーズのためだと思う。 –

8

受け入れられる答えは、空のビューとテンプレートとの間の依存関係を強制します。これは正しく感じません。

これを行う別の方法は、コンポジットビューでダイナミックテンプレートを使用することです。これは、ベースのView getTemplate()メソッドをオーバーライドすることによって行われます。

SupportTeamView = Marionette.CompositeView.extend({ 
getTemplate: function() { 
    if (_.isEmpty(this.collection)) { 
     return "#empty-template" 
    } else { 
     return "#support-team-template"; 
    } 
itemView: SupportMemberView, 
emptyView: EmptyView, 
itemViewContainer: 'tbody' 
}); 
+2

あなたのアイデアの問題は 'getTemplate'は一度だけ呼び出され、それを動的なもの、つまりコレクションの内容にバインドするということです。だから、このアイデアはコレクションが決して変わらないという事実に固執しています。 –

関連する問題