Marionette onAttach活动

时间:2017-03-19 05:50:25

标签: javascript marionette

Marionette版本3.2.0

onAttach lifecycle event not fire

根据doc

  

标有“*”的事件仅在区域的el为/时触发   附在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');
    }

  });

1 个答案:

答案 0 :(得分:1)

目前尚不清楚如何实例化视图并将其附加到页面,但onAttach方法仅在“显示”区域视图时触发。因此,如果您手动渲染并将视图附加到DOM,例如,它将不会触发。

下面的代码段显示了View的{​​{1}}方法将触发的示例:

onAttach

小提琴:https://jsfiddle.net/wa69p3kj/

请注意,这不一定需要在应用程序的区域中显示 - const App = Mn.Application.extend({ region: '.content', onStart: function() { this.showView(new View()); } }); new App().start(); 方法也会在显示showChildView的视图时触发。