手元にある正確な原因はわかりませんが、セットアップには、問題の一部である可能性があると思わせる面白いものがいくつかあります。
注:私はあなたが投稿したものに基づいて、あなたのコードとテンプレートについていくつかの大きな仮定をしています。私が言っていることの多くを無効にするようなことがいくつも起こっている可能性があります。しかし、あなたが投稿した内容を踏まえて、このコードをどのように整理するかについての私の考えを以下に示します。これは、発生している問題をクリーンアップするのに役立つ可能性があります。
悪いHTML出力?
各アイテムビューをタグとして設定しましたが、少なくとも構成したイベントに基づいて、そのビューによって<tbody>
いくつかのタグがレンダリングされているように見えます。<th>
これにより、次のような無効なHTMLが生成されます。
<table>
<tbody>
<th></th>
</tbody>
</table>
のテンプレートを見ないと言うのは難しい#plansRow
ですが、そういうものが出てくると思います。
問題は、コレクションビューがテーブルの生成に適していないことです。テーブル内に行を適切に生成し、テーブルタグラッパーを生成できますが、コレクションビューはテンプレートをレンダリングしないため、適切なテーブル構造に必要なテーブルヘッダー、フッター、本文、またはその他のタグを取得できません。自分自身の。ラッパータグを作成してから、コレクション内の各子をレンダリングするだけです。
これを修正するには、独自のテンプレートもレンダリングするCollectionViewであるCompositeViewを使用します。
複合ビューを備えたより優れたテーブル構造
Marionetteを使用してテーブルを作成するためのより適切な設定は、CompositeViewを親として使用し、各アイテムビューにtr
タグをレンダリングさせることです。例えば:
RowView = Backbone.Marionette.ItemView.extend({
template: "#row-template",
tagName: "tr"
});
TableView = Backbone.Marionette.CompositeView.extend({
template: "#table-template",
tagName: "table",
appendHtml: function(cv, iv){
cv.$("tbody").append(iv.el);
}
});
<table>
これにより、複合ビューが設定されます。そのビューのテンプレートには<thead><th>...</th></thead><tbody></tbody>
、テーブルを定義するための適切なタグが含まれます。
行ビューはタグとしてレンダリングされ<tr>
、適切なタグを含む必要なデータが入力され<td>
ます。
複合ビューのappendHtml
メソッドは、各アイテムビューを<tbody>
親複合ビューのタグに挿入することを処理します。
このJSFiddleでこれのライブバージョンを見ることができます:http://jsfiddle.net/derickbailey/me4NK/
そして、CompositeViewのこれと他の使用法に沿ったブログ投稿、ここ:http: //lostechies.com/derickbailey/2012/04/05/composite-views-tree-structures-tables-and-more/