让Ember.ArrayController呈现一组promises

时间:2014-06-30 09:34:13

标签: javascript ember.js hypermedia rsvp.js

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

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

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

我想基于Ember.Array创建一个类似于数组的对象,它懒惰地加载连续的页面。但是因为加载是异步对象所以必须返回一个在元素到达时解析的promise。

粗略地以伪代码

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/

0 个答案:

没有答案