【问题标题】:Promise is returned from a model hook, Ember.js does not block until the promise is resolvedPromise 从模型钩子返回,Ember.js 不会阻塞,直到 promise 被解决
【发布时间】:2014-08-27 22:41:48
【问题描述】:

这是我要解决的问题。 我正在尝试通过查询字符串参数(字段:id 和选项卡)从存储中检索联系人记录。我可以在浏览器控制台中看到正在检索的联系人模型。

由于正在对查询参数执行查找操作,因此响应是一个联系人记录的数组。 这就是为什么在下面的控制器代码中,我使用 contact.get('firstObject') 提取联系人模型。

但是,在整个操作完成之前,浏览器中没有渲染任何内容。

我不明白这种行为。 因为我将此操作包装在 RSVP 承诺调用中。 在这个模型钩子返回这个 promise 之前,Ember.js 应该阻塞直到 promise 被解决。请让我知道这里出了什么问题。

export default  Ember.ObjectController.extend({
   model:function(){
   var self = this;
   return new Ember.RSVP.Promise(function(resolve, reject) {
          self.store.find('contact',{id:1, tab: "contactInfo"}).then(function(contact) {
              contact.get('firstObject');
          });

          });
    }.property('model')       
 });

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    你快到了。除了一些冗余代码之外,您当然应该返回您的 firstObject。这应该有效:

     model:function(){
       return this.store.find('contact',{id:1, tab: "contactInfo"}).then(function(contact) {
                  return contact.get('firstObject');
        });
    

    Promise 是 ember 处理异步逻辑的方法,其整体目标不是阻塞整个应用程序。当数据进入时,模板将被更新。

    【讨论】:

    • 我试过了,但效果不佳.. 在回调中返回联系人对象之前,模板会被渲染。因此我无法显示模型..
    • 啊,现在我明白了,你在控制器中这样做,这就是问题所在。如果您从路线内执行此操作,它将起作用。像这样设置你的控制器:emberjs.com/guides/routing/setting-up-a-controller
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2018-08-17
    • 2015-09-05
    • 2017-10-24
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多