我正在构建一个Ember.js应用程序,我需要在渲染/加载所有内容后进行一些额外的设置。
有没有办法获得这样的回调?谢谢!
答案 0 :(得分:10)
在Views上定义了几个可以重载的函数,这些函数将被自动调用。其中包括willInsertElement()
,didInsertElement()
,afterRender()
等
特别是我发现didInsertElement()
是运行代码的有用时间,这些代码在常规的面向对象系统中将在构造函数中运行。
答案 1 :(得分:6)
您可以使用ready
的{{1}}属性。
来自http://awardwinningfjords.com/2011/12/27/emberjs-collections.html的例子:
Ember.Application
答案 2 :(得分:5)
LazyBoy的回答是你想要做的,但它的工作方式与你想象的不同。你的问题的措辞突出了关于恩伯的一个有趣的观点。
在您的问题中,您指定在呈现视图后需要回调。但是,对于良好的'Ember'样式,你应该使用初始化应用程序后触发的'ready'回调,但之前呈现视图。
重要的概念点是,在回调更新数据模型后,您应该让Ember更新视图。
让ember更新视图大多是直截了当的。有一些边缘情况需要使用'didFoo'回调来避免视图中的状态转换闪烁。 (例如,避免显示“没有找到物品”0.2秒。)
如果这对你不起作用,你也可以调查'onLoad'回调。
答案 3 :(得分:3)
您可以使用jQuery ajax callbacks:
$(document).ajaxStart(function(){ console.log("ajax started")})
$(document).ajaxStop(function(){ console.log("ajax stopped")})
这适用于所有ajax请求。
答案 4 :(得分:1)
我只是将其放入应用程序路径
actions: {
loading: function(transition, route) {
this.controllerFor('application').set('isLoading', true);
this.router.on('didTransition', this, function(){
this.controllerFor('application').set('isLoading', false);
});
}
}
然后我的模板中的任何地方都可以使用{{#if isLoading}}启用和禁用加载内容,或者我可以在实际加载操作中添加特殊的jQuery事件。
非常简单但有效。