我有一条EmberJS路线,根据不同的选项,可以将1-20 HighCharts加载到单个模板中。我目前正在使用Ember.RSVP.hash
为每个图表添加AJAX加载承诺。我的路线或多或少看起来像:
model: function () {
var promises = {};
// forEach chart I wish to create (one promise per chart):
promises[chartId] = Ember.$.getJSON(urlForChart).then(function (response) {
// do some post-processing here
});
return Ember.RSVP.hash(promises);
}
这里的问题是,AJAX调用可能需要一段时间,特别是如果有很多图表,并且Ember.RSVP.hash
等待所有承诺在渲染之前完成,所以我不能看到我的{{1} }模板可能需要一段时间。
那么有可能重构我的路由/应用程序,以便在渲染之前不等待所有承诺完成,每个图表将在完成后呈现吗?这甚至可能吗?
或者最好先渲染所有没有数据的HighCharts,然后再单独获取每个数据源(基本上是延迟加载)?如果是这样,我将如何在HighCharts / EmberJS中进行此操作?
顺便说一下,我使用loading.hbs
和Ember 1.13.11
,如果这很重要的话。
答案 0 :(得分:1)
您可以将承诺移至setupController以跳过等待承诺解决。
import Ember from 'ember';
export default Ember.Route.extend({
setupController(controller) {
const promises = {};
promises[0] = Ember.$.getJSON('example.com').then(response => {
// do some post-processing here
});
this._super(controller, promises);
}
});