如何在将Ember View插入DOM后运行函数?
这是我的用例:我想使用jQuery UI进行排序。
答案 0 :(得分:64)
您需要覆盖didInsertElement
,因为它是“当视图元素已插入DOM时调用。覆盖此函数以执行任何需要文档正文中元素的设置。”
在didInsertElement
回调中,您可以使用this.$()
获取视图元素的jQuery对象。
参考:https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/views/view.js
答案 1 :(得分:2)
您也可以使用afterRender方法
didInsertElement: function () {
Ember.run.scheduleOnce('afterRender', this, function () {
//Put your code here what you want to do after render of a view
});
}
答案 2 :(得分:1)
从Ember 3.13开始,您可以使用从Glimmer继承的组件,下面的示例显示了这样的样子:
using HoloToolkit.Unity.InputModule;
这些视图样式组件没有直接的生命周期挂钩,而是可以使用render-modifiers来附加功能。非官方介绍修饰符can be found here
这样做的好处是,可以更清楚地知道模板的职责是什么。
如果您想玩这个,这里是一个可运行的codeandbox: https://codesandbox.io/s/octane-starter-ftt8s
答案 3 :(得分:0)
您需要在视图中的didInsertElement
回调中触发您想要的任何内容:
MyEmberApp.PostsIndexView = Ember.View.extend({
didInsertElement: function(){
// 'this' refers to the view's template element.
this.$('table.has-datatable').DataTable();
}
});
答案 4 :(得分:0)
Ember 2.x:不推荐使用View,而是使用组件
您必须了解组件的生命周期才能知道某些事情何时发生。
随着组件的渲染,重新渲染和最终删除,Ember提供了生命周期钩子,允许您在组件的生命周期中的特定时间运行代码。
https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/
通常,didInsertElement
是与第三方库集成的好地方。
这个钩子保证了两(2)个东西,
$()
方法访问组件的元素。只要属性发生变化,您就需要运行JavaScript
在didRender
hook。
请再次阅读上面的生命周期文档以获取更多信息