2016-01-24 44 views
1

在Ember中是否可以加载多个模型,但不等待promise来解决并仍然使用afterModel钩子?目前,我的代码如下所示:Ember:在不等待的情况下加载模型

export default Ember.Route.extend({ 
    model() { 
    return Ember.RSVP.hash({ 
     imports: this.store.findAll('import', { 
     skip: 0, 
     limit: 5 
     }), 

     latestimport: this.store.find('import', 'latest') 
    }); 
    }, 

    afterModel(model) { 
    ...some modifications here... 
    } 
} 

由于使用Ember.RSVP的,页面加载等待所有承诺,以解决它呈现前。我可以在模型加载之前使页面呈现吗?那么我可以继续使用afterModel钩子吗?我的观点是,所加载的数据只是辅助信息。我不希望整个渲染过程因此被阻塞。我没有在文档中找到任何信息,尽管我感觉文档并不完整。

回答

4

请使用以下方法:

setupController(controller, model) { 
    this._super(controller, model); 

    Ember.RSVP.hash({ 
    imports: this.store.findAll('import', { 
     skip: 0, 
     limit: 5 
    }), 

    latestimport: this.store.find('import', 'latest') 
    }).then(results => { 
    // ...some modifications here... 
    controller.set('model', results); 
    }); 
} 
  1. 它不应该阻止渲染。
  2. 您仍然可以对数据应用修改。
  3. 您仍然可以访问模板中的数据为model.imports,model.latestimport。的
1

,而不是包装你的代码Ember.RSVP.hash只是通过哈希对象,因为它是

model() { 
    return { 
     imports: this.store.findAll('import', { 
     skip: 0, 
     limit: 5 
     }), 

     latestimport: this.store.find('import', 'latest') 
    }) 
    }, 

setupController(controller, model) { 
    this._super(controller, model); 
    // model.latestimport.then(...) 
    // model.imports.then(...) 
} 
相关问题