EDIT3:警告!この回答は古くなっている可能性があります。この回答が機能しなくなり、調査する時間がなかったというコメントを受け取りました (私は個人的にこの方法を使用していません)。
私は Twitter/Bootstrap を UI ライブラリとして使用するのが好きで、デフォルトのタグ ラッピングが原因でテーブルのスタイリングに問題がありました (具体的には<div>、私<tbody>と私<tr>の の間)。
掘り下げた後、マリオネットのドキュメントで がをどのように取り付けるRegionかについて見つけました。バックボーンは、さまざまな属性から を構築し、構築された要素を最新の状態に保ち、いつでもレンダリングできるようにします。だから私は、もし親なら、なぜHTMLコンテンツを使わないのですか? マリオネットは、カスタムを作成する方法も提供しますViewelelViewview.elRegion
Regionオーバーライドされたopen関数を使用してカスタムを作成することで、すべてを実行することができました。そうすれば、タグでラップする領域とラップしない領域を指定できます。次のサンプル スニペットでは、カスタムの非ラッピングRegion( NowrapRegion) を作成し、それを my Layout( MyLayout)で使用し<tbody>ます (実際のプログラムで渡したビューは<tr>s を作成します)。
var NowrapRegion = Marionette.Region.extend({
open: function(view){
this.$el.html(view.$el.html());
}
});
var MyLayout = Marionette.Layout.extend({
template: templates.mylayout,
regions: {
foo: '#foo',
columns: '#columns', //thead
rows: { selector: '#rows', regionType: NowrapRegion } //tbody
}
});
ブーム!必要なときはラッピングし、不要なときはラッピングしません。
編集:これは、レベルeventsで適用される影響を与えるようです。*Viewまだ調べていませんが、トリガーされていないようです。
これが「正しい」方法であるかどうかはわかりません。@derick-bailey がこれを見たら、どんなフィードバックでも歓迎します。
EDIT2: @chris-neale は次のことを提案しました。これはまだ確認していませんが、健全なようです。ありがとう!
ビューで html をコピーするのではなく、子ノードでディープ クローンを使用すると、イベントとデータが維持されます。
var NowrapRegion = Marionette.Region.extend({
open: function(view){
view.$el.children().clone(true).appendTo(this.$el);
}
});