Ember.js:如何观察模板DOM元素是否已被渲染

时间:2015-04-13 21:09:07

标签: jquery templates ember.js controller

我有一个控制器,可以将异步数据加载到Ember主存储中 在加载时,它会显示一个加载微调器。完成加载后,它会显示数据。

我的问题是,我还想在加载数据和渲染模板后注入jQuery逻辑/绑定

问题是:当模板被渲染/更新时会调用哪些钩子?

我尝试观察加载数据的时间,但是在渲染模板后它不能可靠地注入jQuery(见下文):

controllers/index.js

export default Ember.Controller.extend({
    listReady: function() {
       Ember.run.next(this, function() {
       // jQuery logic
        })

    }.observes('model.stations.content.isLoaded'),
})

routes/index.js

export default Ember.Route.extend({
    setupController: function(controller, model) {
        var that = this;
        controller.set('content', {
            stations: that.store.find('station'),
            others: that.store.find('other')
        }); 
    }
});

templates/index.js

{{#if model.stations.content.isLoaded}}
{{!--display the data--}}
{{else}}
{{!--display a loading spinner--}}
{{/if}}

1 个答案:

答案 0 :(得分:2)

有两件事 - 在模型钩在路由和后模型钩子之前。 如果要在模型对象中加载数据后执行某些操作,则可以使用aftermodel挂钩。

你可以在这里阅读更多这些钩子 - http://guides.emberjs.com/v1.10.0/routing/asynchronous-routing/

对于加载微调器事物 - 您不需要在处理程序栏(模板)中显式编写逻辑,您可以在路由中执行此操作。 Ember仅提供装载路线。您可以参考以下链接获取更多信息

http://guides.emberjs.com/v1.10.0/routing/loading-and-error-substates/