如何使模板等到路由加载数据控制器依赖?

时间:2018-04-19 09:27:03

标签: ember.js

在模板中我有一个字段:

{{#if thisIsIt}}Hello{{/if}}

在控制器中:

thisIsIt: function()
{
   return this.get("underdata").get("length") // 1
}.property('underdata')

在路由器中:

setupController: function(controller, model) 
{
   this.store.find('underdata', {id: 1 }).then(function(underdata) // 2
    {
        controller.set("underdata", underdata); // 3
    });
}

通话顺序为:2,1,3。所以控制器满足模板试图得到一个underdata的长度。但是underdata是未定义的,因为3还没有被调用。抛出错误后,最终会调用3。

如何让控制器等到setupController从underdata获取必要的数据?

1 个答案:

答案 0 :(得分:1)

你的问题是承诺。虽然首先调用setupController函数,但稍后会解决承诺。

解决方案是使用model挂钩来加载数据。如果beforeModel挂钩确实无效,您还可以使用afterModelmodel挂钩。

在继续路由之前,这三个钩子将等待返回的承诺解决。