javascript - 了解 Backbone 和 Marionette View 生命周期

标签 javascript backbone.js marionette lifecycle backbone-views

我是这个世界的新手,我需要了解 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/

相关文章:

javascript - Angular 4可观察返回[对象对象]

javascript - 不要在更改时渲染主干 Marionette Collection View ?

backbone.js - Marionette 布局和区域有什么区别?

javascript - Backbone.js pushState 不工作并给出 404 错误

.net - Backbone.js 模型同步和 C# .net RESTful Web 服务

javascript - backbone.js 集合 where() 函数

jquery - 事件顺序 Backbone.Marionette.Application.addInitializer 和 $(document).read()

javascript - GoJS Leaflet图层缩放

javascript - React 中如何制作有焦点或有内容时可以向上移动的 float 标签?

javascript - Ember 组件查找/调试/测试