我是这个世界的新手,我需要了解Backbone和Marionette的一些概念。在这里,我试图解释一些我正在学习的概念。对他们提供一些反馈会很棒。
render
函数定义了渲染模板的逻辑。完成后,将调用onRender
回调。这里我假设渲染的视图没有附加到DOM。它由tagName
(默认为div
)组成,其中包含我附加到其上的模板。要将该标记显式插入DOM,我需要将其附加到某处。我错了吗?
一般来说,我会做以下事情。
var view = new MyView();
view.render();
$("container").append(view.$el);
Marionette通过区域概念扩展了Backbone。可以在区域上调用show
方法以显示特定视图。
var view = new MyView();
region.show(view);
在这种情况下,show
方法将自己调用render
函数,最后,当视图内容放入DOM时,onShow
为呼吁这种观点。可以吗?
来自Marionette doc还有另一个名为onDomRefresh
的回调。从我的实验中,我注意到在onShow
之前调用了这个方法。所以,我的假设是视图尚未附加到DOM。但是医生说了以下内容。
在渲染视图后触发,已在DOM中显示 通过Marionette.Region,并且已经重新渲染。
你可以给它一些提示吗?
提前致谢。
答案 0 :(得分:3)
对于它的价值,我相信你所说的一切或多或少是正确的。
查看源代码(可用here - 查找“DomRefresh”),将MonitorDOMRefresh位混合到每个视图中并添加此API:
return function(view){
view.listenTo(view, "show", function(){
handleShow(view);
});
view.listenTo(view, "render", function(){
handleRender(view);
});
};
所以真的,所有发生的事情都是将2个事件监听器附加到视图中,并且回调(handleShow
/ handleRender
)设置布尔值_isShown
或_isRendered
并致电triggerDomRefresh
,其中说:
function triggerDOMRefresh(view){
if (view._isShown && view._isRendered){
if (_.isFunction(view.triggerMethod)){
view.triggerMethod("dom:refresh");
}
}
}
所以,你去... onDomRefresh
将在视图渲染,显示,然后重新渲染时被调用。
希望有所帮助!