Backbone Marionette でテーブルを表示するために複合ビューを使用していますが、モデルでフェッチを行った後にデータが入ってくると、テンプレートのラッパー部分を再レンダリングするのに問題があります。ここに私のテンプレートがあります:
複合ビューのテンプレート:
<thead>
<tr>
{{#each report.columns}}
<th>{{name}}</th>
{{/each}}
</tr>
</thead>
<tbody></tbody>
そして ItemView のテンプレート:
{{#each cols}} <td>{{value}}</td> {{/each}}
コントローラー関数では、モデルのインスタンスを作成し、ビューを作成して表示し、フェッチを行ってデータをモデルに取得しています。
var tView = new tableCompositeView({collection: rowsCollection, model: configModel});
layoutView.tablecontent.show(tView);
rowsCollection.fetch();
configModel.fetch();
コレクション アイテムは正常に取得され、フェッチが成功するとビューが更新されます。ただし、configModel.fetch() が終了しても、複合ビューのテンプレートのラッパー ビットは更新されません。
ドキュメントでは、 .renderModel() を使用して、モデルを扱うビューの部分のみを再レンダリングできると書かれています。私がこれを行うとき:
configModel.fetch().success(function(){ tView.renderModel(); });
何も変わりません。しかし、.render() を使用すると:
configModel.fetch().success(function(){ tView.render(); });
正常に動作し、更新されます。これは今のところ機能する可能性がありますが、テーブル全体を再レンダリングしているため、パフォーマンスの問題が発生する可能性があります