余烬afterRender组件/非异步AJAX
设想一个呈现HTML表的组件。表中的数据来自远程JSON 组件的另一部分依赖于完全呈现的HTML表(使用JSON数据) 在组件的余烬afterRender组件/非异步AJAX,ajax,ember.js,Ajax,Ember.js,设想一个呈现HTML表的组件。表中的数据来自远程JSON 组件的另一部分依赖于完全呈现的HTML表(使用JSON数据) 在组件的init事件中,我检索JSON并设置组件用于呈现表的数据 我不能使用afterRender钩子来进一步处理该表,因为当触发afterRender时,该表存在,但没有JSON数据 我注意到组件外部的afterRender钩子起作用(表已完全呈现),但随后我会通过运行属于组件内部的代码来破坏封装 我可以同步获取JSON,或者在一个承诺中得到一个承诺?我怎么做后者?我的意思是
init
事件中,我检索JSON并设置组件用于呈现表的数据
我不能使用afterRender
钩子来进一步处理该表,因为当触发afterRender
时,该表存在,但没有JSON数据
我注意到组件外部的afterRender
钩子起作用(表已完全呈现),但随后我会通过运行属于组件内部的代码来破坏封装
我可以同步获取JSON,或者在一个承诺中得到一个承诺?我怎么做后者?我的意思是,在组件的init
hook上,如何创建一个只在返回其内部的承诺时才返回的承诺
或者我怎么才能用余烬的方式来实现这一点呢?你完全可以把你的承诺挂在一边
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);
});
});
超深奥的承诺
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);
});
});
很有道理,谢谢你教了我一些我需要的东西:)不过,我想我刚刚找到了一个更好的方法来解决这个特殊的问题。如果我“观察”HTML表所依赖的属性,那么在观察者内部,该表将完全呈现,因此我可以执行我需要的操作!亲爱的。伊凡听状态模型加载是做这件事的方法(DS模型加载),请考虑回答你自己的问题。还可以看看这篇文章。