我如何适应EmberJS中缓慢加载的高图?

时间:2016-01-25 18:41:34

标签: javascript ember.js highcharts

我有一条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.hbsEmber 1.13.11,如果这很重要的话。

1 个答案:

答案 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);
  }
});