EDIT3:警告!この回答は古くなっている可能性があります。この回答が機能しなくなり、調査する時間がなかったというコメントを受け取りました (私は個人的にこの方法を使用していません)。
私は Twitter/Bootstrap を UI ライブラリとして使用するのが好きで、デフォルトのタグ ラッピングが原因でテーブルのスタイリングに問題がありました (具体的には<div>
、私<tbody>
と私<tr>
の の間)。
掘り下げた後、マリオネットのドキュメントで がをどのように取り付けるRegion
かについて見つけました。バックボーンは、さまざまな属性から を構築し、構築された要素を最新の状態に保ち、いつでもレンダリングできるようにします。だから私は、もし親なら、なぜHTMLコンテンツを使わないのですか? マリオネットは、カスタムを作成する方法も提供しますView
el
el
View
view.el
Region
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);
}
});