2

Ember 控制器具有承诺意识,因为模型可以是承诺。对于 ArrayController 你可以对数组有一个 Promise,但是如果你有一个包含 Promise 的数组呢?

请参阅此 JSFiddle 以获取示例http://jsfiddle.net/7QSZ6/

为什么我需要这个?我们有一个带分页的超媒体 (HAL) API,所以如果我请求 500 个项目的集合,我会返回前 50 个项目,以及指向下一个 50 个项目的链接,以及总数。

我想创建一个基于 Ember.Array 的类似数组的对象,它可以延迟加载连续的页面。但是由于加载是异步的,objectAt 必须返回一个在元素到达时解决的承诺。

大致是伪代码

MyArray = Ember.Object.extend(Ember.Array({
  length: 500,
  retrieved: 50,

  objectAt: function(i) {
    if (i > this.get('retrieved')) {
      retrievePageFor(i);
    }
    return this.get('promiseArray')[i];
  },

  retrievePagesFor: function(i) {
    // request pages until we have a value for index i
    // update 'retrieved'
    // populate 'promiseArray' with promises that resolve when the data arrives
  }
}));

更新:

一种方法是使用 PromiseProxyMixin “手动”完成,例如http://jsfiddle.net/Au7LC/1/

4

0 回答 0