EDIT3:警告!此答案可能已過時。我收到了一條評論,說這個答案不再有效,並沒有時間去調查(我個人不使用這種方法)。
我喜歡使用Twitter /引導我的UI庫,並有因爲默認的標籤纏繞(特別是我<tbody>
和我<tr>
S之間的<div>
)的一些問題與表的造型。
經過一番挖掘,我在關於how the View
attaches the el
的Marionette文檔中發現了一些東西。 Backbone builds the el
從各種View
屬性,並保持內置的元素是最新的,所以它可以在任何時候呈現。所以我想,如果view.el
是父母,爲什麼不只是使用HTML內容?木偶也提供了一種方式create a custom Region
我能夠通過創建一個自定義Region
一個覆蓋open
函數得到一切運行。這樣我可以指定我想用標籤包裝哪些區域以及哪些區域不包含。在下面的示例代碼片段中,我創建了我的自定義無包裝Region
(NowrapRegion
),並將其用於我的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
}
});
BOOM!當我需要時包裝,當我不需要時包裝。
編輯:這似乎影響events
應用於*View
級別。我還沒有看過它,但要警告他們似乎沒有被觸發。
無論這是否是「正確」的做法,我都不確定。如果他看到這個,我會歡迎來自@ derick-bailey的任何反饋。
EDIT2: @ chris-neale建議如下,我還沒有驗證,但它似乎很好聽。謝謝!
而不是在視圖中複製html,使用 子節點上的深克隆將維護事件和數據。
var NowrapRegion = Marionette.Region.extend({
open: function(view){
view.$el.children().clone(true).appendTo(this.$el);
}
});
有沒有一種木偶特定的方式來完成這個?我認爲最好只使用'模板'屬性 – streetlight
優秀。我真的不喜歡所有其他答案,我看到說操縱DOM來解決這個問題。爲什麼,只要setElement()? – trusktr