了解Backbone和Marionette View生命周期

时间:2013-08-09 09:36:15

标签: javascript backbone.js marionette lifecycle backbone-views

我是这个世界的新手,我需要了解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,并且已经重新渲染。

你可以给它一些提示吗?

提前致谢。

1 个答案:

答案 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将在视图渲染,显示,然后重新渲染时被调用。

希望有所帮助!