想象一下呈现HTML表的组件。该表中的数据来自远程JSON。
组件的另一部分依赖于完全呈现的HTML表(使用JSON数据)。
在组件的init
事件中,我检索JSON并设置组件用于呈现表的数据。
我无法使用afterRender
挂钩来进一步处理表,因为当afterRender
被触发时,表存在但没有JSON数据。
我注意到组件外部的afterRender
挂钩工作(表完全呈现),但是我通过运行属于组件内部的代码来打破封装。
我可以同步获得JSON,或者也许是承诺中的承诺?我怎么做后者?我的意思是在组件的init
钩子上,我如何创建一个仅在返回其中的promise时返回的promise?
或者我怎样才能以Ember方式接近它?
答案 0 :(得分:0)
你绝对可以脱离你的承诺。
var items = [];
this.set('items', items);
$.getJSON('/colors').then(function(results){
results.forEach(function(item){
item.color +=" is pretty";
});
return results;
}).then(function(prettyResults){
prettyResults.forEach(function(item){
items.pushObject(item);
});
});
http://emberjs.jsbin.com/OxIDiVU/724/edit
超级深刻的承诺
new Ember.RSVP.Promise(function(resolve){
resolve($.getJSON('/colors'));
}).then(function(results){ // this isn't hit til the json is returned
results.forEach(function(item){
item.color +=" is pretty";
});
return new Ember.RSVP.Promise(function(resolve){
Ember.run.later(function(){
resolve(results);
}, 4000);
});
}).then(function(prettyResults){ // this isn't hit til the 4 second resolve is done
prettyResults.forEach(function(item){
items.pushObject(item);
});
});