Marionette onAttach 事件

Marionette onAttach event

Marionette 版本 3.2.0

onAttach 生命周期事件未触发

根据doc

The events marked with "*" only fire if/when the region's el is attached to the DOM.

猫大师解释为什么?

Mn.View.extend({
    tagName: 'table',
    className: 'table',
    template: _.template(template),
    regions: {
        body: {
            el: 'tbody',
            replaceElement: true
        }
    },
    initialize(options) {
      console.log(Mn.isNodeAttached(this.el)); // false
      setTimeout(() => console.log(Mn.isNodeAttached(this.el)), 0); // true
    },
    serializeData() {
      return {
        foo: 'bar'
      }
    },
    onRender() {
      this.showChildView('body', new TableBodyView());
    },

    onAttach() {
      // why onAttach not work ?
      console.log('attached');
    }

  });

不清楚您是如何实例化视图并将其附加到页面的,但是 onAttach 方法仅在 'showing' 视图进入区域时触发。因此,例如,如果您手动渲染视图并将视图附加到 DOM,它不会触发。

下面的代码片段显示了一个示例,其中 ViewonAttach 方法将被触发:

const App = Mn.Application.extend({
    region: '.content',
    onStart: function() {
        this.showView(new View());
    }
});

new App().start();

Fiddle: https://jsfiddle.net/wa69p3kj/

请注意,这不一定需要在应用程序的区域中显示 - onAttach 方法也会在显示带有 showChildView 的视图时触发。