開始の問題
コレクション内の各モデルが 2 つのテーブル行として表される CompositeView (テーブル) があり、次のようなテンプレートがあります。
<tr class="row-parent">
<td>parent info here</td>
</tr>
<tr class="row-child">
<td>child info here</td>
</tr>
次のような ItemView を使用します。
var ItemView = Backbone.Marionette.ItemView.extend({
template: ItemTmpl
});
「親」と「子」という名前が付いていますが、実際には同じモデルのピア メンバーです。tagName を指定しないと、Backbone は各ビューを<div>
無効な HTML でラップし、レイアウトを壊します。
ソリューションへの最初の試み
そこで、外側の<tr>
タグを削除して Backbone に追加させてみませんか? そこで、テンプレートを次のように更新しました。
<td>parent info here</td>
</tr>
<tr class="row-child">
<td>child info here</td>
ビューを次のように更新しました。
var ItemView = Backbone.Marionette.ItemView.extend({
template: ItemTmpl,
tagName: 'tr',
className: 'row-parent'
});
外側のタグが内側のタグ フラグメントと結合することを期待していましたが、Marionette はそれを好みませんでした。行の子のみが表示されました。だから、ここからどこへ行けばいいのかわからない。2 つの戦略を検討していますが、まだ詳細には触れていません。
今後: プラン A
Backbone の任意の部分をオーバーライドして余分な div を作成しないようにするか、ビューを追加する Marionette の部分をオーバーライドして、追加する直前に div を削除します。
今後: プラン B
CompositeMultiView と呼ばれる新しいタイプのビューを作成します。これは当然、CompositeView から拡張され、2 番目の ItemView またはビューの配列を指定できるようになります。これらはすべて、指定されたモデルごとにレンダリングされます。この計画は、より多くの作業のように見えますが、ハッキングは少ないようです。
上記の2つの計画のいずれかを実装する方法について、より良い提案、回避策、または具体的な指針を誰かが持っていますか?
テーブルがどのように見えるかのモックアップを次に示します。