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,它不会触发。
下面的代码片段显示了一个示例,其中 View
的 onAttach
方法将被触发:
const App = Mn.Application.extend({
region: '.content',
onStart: function() {
this.showView(new View());
}
});
new App().start();
Fiddle: https://jsfiddle.net/wa69p3kj/
请注意,这不一定需要在应用程序的区域中显示 - onAttach
方法也会在显示带有 showChildView
的视图时触发。
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,它不会触发。
下面的代码片段显示了一个示例,其中 View
的 onAttach
方法将被触发:
const App = Mn.Application.extend({
region: '.content',
onStart: function() {
this.showView(new View());
}
});
new App().start();
Fiddle: https://jsfiddle.net/wa69p3kj/
请注意,这不一定需要在应用程序的区域中显示 - onAttach
方法也会在显示带有 showChildView
的视图时触发。