【问题标题】:Ember.js get 2 nested models in one route in asynchronous wayEmber.js 以异步方式在一条路由中获取 2 个嵌套模型
【发布时间】:2015-03-30 01:37:53
【问题描述】:

我对服务器进行了 2 次调用,这些调用持续了很长时间(10-20 秒)。在第一次请求(不重要)完成后,我需要在页面上更新信息。第二个请求完成后 - 我还需要更新部分页面。

如何实现,因为我尝试过用 Promises 实现

App.IndexRoute = Ember.Route.extend({
    model: function(){
      return Ember.$.getJSON('url').then(firstMethod).then(secondMethod)
    }
})

但它不起作用,因为 secondMethod 将在 firstMethod 完成后执行。

我也试过使用这个代码:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
      first_data: Ember.$.getJSON('url1'),
      second_data: Ember.$.getJSON('url2') 
    });
  }
});

但我也有同样的问题 - 2 次调用结束后会返回数据。

如何异步运行这两个请求,并独立更新页面上的部分数据?

【问题讨论】:

    标签: ajax asynchronous ember.js promise


    【解决方案1】:

    我会使用PromiseProxyMixin 来创建对象代理,当你的承诺解决时会自动更新。像这样的:

    model: function() {
        return Ember.Object.create({
            first_data: Ember.ObjectProxy.createWithMixins(Ember.PromiseProxyMixin, {
                promise: Ember.$.getJSON('url1')
            }),
            second_data: Ember.ObjectProxy.createWithMixins(Ember.PromiseProxyMixin, {
                promise: Ember.$.getJSON('url2')
            })
        });
    }
    

    Ember 将监视您的模型和您的两个数据属性以进行更新。在 promise 解决之前,请求的每个属性都将返回 undefined。但是当 Promise 解决时,PromiseProxyMixin 将触发代理的更新,这反过来又会触发您正在观看的所有属性的更新。

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      相关资源
      最近更新 更多