我有一个Marionette.CollectionView
呈现ItemView
s 的列表。在此期间render()
,我使用 ItemViewmodel
使用Raphael绘制一些 SVG 。
Raphael 要求我为其画布指定高度和宽度,我通常会从this.$el
. 但是,$el
(作为空的<div>
)在添加到 DOM 并对其应用 CSS 规则之前没有尺寸,所以我需要延迟渲染,直到我知道视图在 DOM 中。
问题是Marionette.CollectionView
在渲染之前不会将子视图添加到 DOM。如何在不重新实现一半的情况下覆盖此行为CollectionView
?
示例代码
// Renders a single object.
var ItemView = Marionette.ItemView.extend({
template: "#item-view-template",
onRender: function() {
var svgEl = this.$el.find("div.svg-canvas");
// Raphael needs the element's width and height, which
// is 0 until this.$el is in the DOM.
var paper = Raphael(svgEl.get(0), svgEl.height(), svgEl.width());
// ... draw some SVG...
}
});
// Renders a collection of objects.
var ListView = Marionette.CollectionView.extend({
itemView: ItemView,
model: MyModel
});
// Main point of entry.
MyApp.show = function() {
var collection = new MyCollection();
var listView = new ListView({ collection: collection });
MyApp.mainRegion.show(listView);
collection.fetch();
};