【发布时间】:2020-05-29 13:12:18
【问题描述】:
Grapesjs 提供了两个生命周期方法:init() 和 onRender(),我其实对这两个钩子很困惑:
正如医生所说:
- 本地钩子:
view.init() 方法,在组件视图初始化后执行- 本地钩子:
view.onRender()方法,在组件在画布上渲染后执行
init({ model }) {
// Do something in view on model property change
this.listenTo(model, 'change:prop', this.handlePropChange);
// If you attach listeners on outside objects remember to unbind
// them in `removed` function in order to avoid memory leaks
this.onDocClick = this.onDocClick.bind(this);
document.addEventListener('click', this.onDocClick)
},
// Do something with the content once the element is rendered.
// The DOM element is passed as `el` in the argument object,
// but you can access it from any function via `this.el`
onRender({ el }) {
const btn = document.createElement('button');
btn.value = '+';
// This is just an example, AVOID adding events on inner elements,
// use `events` for these cases
btn.addEventListener('click', () => {});
el.appendChild(btn);
},
例如,我可以在这两种方法中访问this.el 来获取 dom 元素。如果我想在this.el上附加一个事件监听器,哪个更适合做这样的操作?
总的来说,这两种方法有什么区别,我应该在什么情况下使用它们?
【问题讨论】:
标签: grapesjs