しばらくの間、これを解決しようとしてきたので、助けを求めたいと思います。ツリー構造と CompositeViews に関するDerick Bailey のブログ投稿を読みました。David Sulcも読みましたが、そこに記載されているユースケースとは少し異なると思います。注: 私のプロジェクトでは Marionette.js 1.0.3 を使用しています。
メールがテーブルに表示された受信トレイのように機能するものを構築しようとしています。電子メールはスレッドである場合があります。つまり、リンクされている他の電子メールがあります。<table>
受信トレイ ビューは、それぞれ<tr>
が電子メールである にレンダリングされています。私のJSONは次のようになります:
[
{id: 1, subject: 'One', threads: []},
{id: 2, subject: 'Two', threads: [
{id: 3, subject: 'Three', threads: []},
{id: 4, subject: 'Four', threads: []}
]},
{id: 5, subject: 'Five', threads: []}
]
私のビューは次のように構成されています。
InboxView = Marionette.CompositeView.extend({
// edited for brevity
initialize: function(options) {
this.itemView = EmailView;
}
// edited for brevity
});
EmailView = Marionette.CompositeView.extend({
// edited for brevity
tagName: 'tr',
initialize: function(options) {
this.collection = this.model.get('threads');
},
onRender: function() {
if (this.model.isThread()) this.$el.addClass('thread');
}
// edited for brevity
});
私が抱えている問題は、モデルを 1 回レンダリングしてからスレッドのコレクションを 1 回レンダリングすることで CompositeView にその魔法を働かせると<tr>
、<tr>
元の電子メール (親)。
には、再利用しようとしているInboxView
機能が存在します。EmailView
私が最終的にやろうとしているのは、すべての行が同じレベルに表示されているテーブルです。
これを読んで私を助けたいと思ったら、よろしくお願いします!