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/