我是这个世界的新手,我需要了解 Backbone 和 Marionette 的一些概念。在这里,我试图解释我正在学习的一些概念。如果能对他们提出一些反馈意见,那就太好了。
render
函数定义渲染模板的逻辑。完成后,将调用 onRender
回调。在这里我假设渲染 View 没有附加到 DOM。它由包含我附加到它的模板的 tagName
(默认为 div
)组成。要将该标记显式插入到 DOM 中,我需要将其附加到某处。我错了吗?
一般来说,我会做以下事情。
var view = new MyView();
view.render();
$("container").append(view.$el);
Marionette 使用区域的概念扩展了 Backbone。可以在区域上调用 show
方法来呈现特定 View 。
var view = new MyView();
region.show(view);
在这种情况下,show
方法将自己调用 render
函数,最后,当 View 的内容将放入 DOM 时, onShow
在该 View 上被调用。可以吗?
Marionette 文档中还有另一个回调,称为 onDomRefresh
。从我的实验中,我注意到此方法在 onShow
之前被调用。所以,我的假设是 View 尚未附加到 DOM。但是文档说了以下内容。
Triggered after the view has been rendered, has been shown in the DOM via a Marionette.Region, and has been re-rendered.
你能给出一些提示吗?
提前致谢。
最佳答案
不管怎样,我相信你所说的一切或多或少都是正确的。
查看源代码(可用 here -- 寻找“DomRefresh”)MonitorDOMRefresh 位混合在每个 View 中并添加此 API:
return function(view){
view.listenTo(view, "show", function(){
handleShow(view);
});
view.listenTo(view, "render", function(){
handleRender(view);
});
};
实际上,所有发生的事情都是将 2 个事件监听器附加到 View ,并且回调 (handleShow
/handleRender
) 设置了一个 bool 值 _isShown
或 _isRendered
并调用 triggerDomRefresh
,它表示:
function triggerDOMRefresh(view){
if (view._isShown && view._isRendered){
if (_.isFunction(view.triggerMethod)){
view.triggerMethod("dom:refresh");
}
}
}
那么,你去... onDomRefresh
将在 View 被渲染、显示然后重新渲染时调用。
希望对您有所帮助!
关于javascript - 了解 Backbone 和 Marionette View 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143692/