8

我是这个世界的新手,我需要了解 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。但是医生说以下。

在视图渲染后触发,已通过 Marionette.Region 显示在 DOM 中,并已重新渲染。

你能给出一些提示吗?

提前致谢。

4

1 回答 1

3

对于它的价值,我相信你所说的一切或多或少都是正确的。

查看源代码(可在此处获取- 查找“DomRefresh”)MonitorDOMRefresh 位混合到每个视图中并添加此 API:

return function(view){
  view.listenTo(view, "show", function(){
    handleShow(view);
  });

  view.listenTo(view, "render", function(){
    handleRender(view);
  });
};

所以真的,所有发生的事情是 2 个事件侦听器附加到视图,回调 ( handleShow/ handleRender) 设置一个布尔值_isShownor_isRendered和 call triggerDomRefresh,它说:

function triggerDOMRefresh(view){
  if (view._isShown && view._isRendered){
    if (_.isFunction(view.triggerMethod)){
      view.triggerMethod("dom:refresh");
    }
  }
}

所以,你去吧......onDomRefresh将在视图被渲染、显示然后重新渲染的任何时候被调用。

希望有帮助!

于 2013-08-11T00:08:10.813 回答