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/