ember.js - 从多个剩余调用构建模型对象

标签 ember.js rsvp.js

我有一条如下所示的路线,它从多个休息调用中构建数据。

App.IndexRoute = Ember.Route.extend({
  model: function() {
      var id = 1; //will get as url param later
      var modelData = {ab:{},ef:{}};
        return ajaxPromise('https://url1/'+ id +'?order=desc').then(function(data){
            modelData.ab = data.items[0];
            return ajaxPromise('https://url2/'+ id +'/?order=desc').then(function(data){
                modelData.ab.x = data.items;
                return modelData;
            })
        });
    }
});

我的ajaxPromise函数如下:

var ajaxPromise = function(url, options){
  return Ember.RSVP.Promise(function(resolve, reject) {

    var options = options || {
        dataType: 'jsonp',
        jsonp: 'jsonp'
    };

    options.success = function(data){
      resolve(data);
    };

    options.error = function(jqXHR, status, error){
      reject(arguments);
    };

    Ember.$.ajax(url, options);
  });
};

现在的问题是我知道我可以将 RSVP.all 与 Promise 实例一起使用,但从这些 url 返回的数据必须设置为模型对象,如上面所示。

此外,可能还会有一些休息调用需要来自其他休息调用的数据。我还有其他方法可以处理这个 promise 吗?

PS:单条路线立即需要数据

最佳答案

App.IndexRoute = Ember.Route.extend({
  model: function() {
      var id = 1; //will get as url param later
      return Ember.RSVP.hash({
        r1: ajaxPromise('https://url1/'+ id +'?order=desc'),
        r2: ajaxPromise('https://url2/'+ id +'/?order=desc')
      });
   },
  setupController:function(controller, model){
    model.ab = model.r1.items[0];
    model.ab.x = model.r2.items;
    this._super(controller, model);
  }
);

如果您有两个必须同步运行(第二个取决于第一个),您可以创建自己的 Promise,该 Promise 在您调用解析之前不会解析。

   model: function() {
      var promise = new Ember.RSVP.Promise(function(resolve, reject){
        var modelData = {ab:{},ef:{}};
        ajaxPromise('https://url1/'+ id +'?order=desc').then(function(data){
          modelData.ab = data.items[0];
          ajaxPromise('https://url2/'+ id +'/?order=desc').then(function(data){
            modelData.ab.x = data.items;
            resolve(modelData);
          })
        });
      });
     return promise;
   },

关于ember.js - 从多个剩余调用构建模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20543802/

相关文章:

ember.js - 使用额外的树在 ember-cli-build 中正确地 babel 转译文件

ember.js - transitionTo ('route' , context) 传递上下文基本路由,而不是请求的路由

javascript - 如何使用 promises 异步读取多个文件,然后继续

javascript - 在 JavaScript 中返回一个 promise

javascript - JSHint、For 循环、Promises 和一个讨厌的 lint 错误

javascript - 使用 RSVP.js Promise 库运行多个 JavaScript Promise

javascript - Ember.js - 无法对不在 DOM 中的 Metamorph 执行操作

javascript - Ember.js - "Cannot perform operations on a Metamorph that is not in the DOM"由模板引起

jquery - 更新 Ember 嵌套模型和模板