如何在将Ember视图插入DOM后运行函数?
这是我的用例:我想使用jQuery UI可排序来允许排序。
如何在将Ember视图插入DOM后运行函数?
这是我的用例:我想使用jQuery UI可排序来允许排序。
您需要重写didInsertElement
,因为它是“在视图元素插入到DOM时调用。覆盖此函数以执行任何需要文档正文中的元素的设置。”
在didInsertElement
回调内,您可以使用 this.$()
获取视图元素的jQuery对象。
参考: https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/views/view.js
didInsertElement: function () {
Ember.run.scheduleOnce('afterRender', this, function () {
//Put your code here what you want to do after render of a view
});
}
Ember 2.x: 视图已弃用,请使用组件替代
你需要理解组件的生命周期,才能知道某些事情何时发生。
随着组件的渲染、重新渲染和最终删除,Ember 提供了生命周期钩子,允许你在组件生命周期的特定时间运行代码。
https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/
通常来说,didInsertElement
是与第三方库进行集成的绝佳时机。
这个钩子保证了两件事情:
$()
方法进行访问。如果你需要在属性变化时运行 JavaScript
请在 didRender
钩子函数中运行你的代码。
再次强调,请仔细阅读上述生命周期文档以获取更多信息。
import Component from '@glimmer/component';
import { action } from '@ember/object';
/* global jQuery */
export default class MyOctaneComponent extends Component {
@action configureSorting(element) {
jQuery(element).sortable();
}
}
<div {{did-insert this.configureSorting}}>
<span>1</span>
<span>2</span>
<span>3</span>
</div>
在您的视图中,您需要在didInsertElement
回调中触发任何想要触发的内容:
MyEmberApp.PostsIndexView = Ember.View.extend({
didInsertElement: function(){
// 'this' refers to the view's template element.
this.$('table.has-datatable').DataTable();
}
});
this.$()
来获取 DOM 元素的 jQuery 封装对象。 - Luke Melia