0

我需要显示一个多线图。

我需要从一个 rest api 获取 3 个信号值并等到我得到所有这些值然后我渲染图表。

我知道如何等待:

this.scores = new ActivityScore();
var that = this;
this.scores.on("change", function(model) {
    console.log(model.attributes);
    that.configuration.series =[{
                    name: 'Activity',
                    data: graphMappers.toGraphSerie(model)}]
            });
this.scores.fetchFromDate("myDate");

JQuery $.when 的新功能非常有趣,我会尝试将它与backbone.Model 混合,仍在尝试!

像这样的东西会很好:

$.when(scores1.fetchFromDate("myDate"),scores2.fetchFromDate("myDate"),graph.render())
4

1 回答 1

0

我一直在等着看是否有人会带来比我的方法更干净的东西。

我想到的唯一解决方案是在您完成 a 时发送一个信号fetch()并将计数保持在某处,并在数字达到具体数字时执行您的等待代码。

为了使它更优雅,您可以使用Event Aggregator

// code simplified and no tested
var App = {}
App.NumScores = 3;
App.counter = 0;

App.eventAggregator = _.extend({}, Backbone.Events);
App.eventAggregator.on( "app:addCounter", App.addCounter );

App.addCounter = function (){
  App.counter ++;
  if( App.counter == App.NumScores ){
    App.eventAggregator.trigger( "app:scoresFetched" );
    App.counter = 0;
  }
}

App.eventAggregator.trigger( "app:addCounter" )现在,您可以在任何时候打电话给您,fetch()您可以使用该success选项或其他任何东西。此外,您应该听App.eventAggregator.on( "app:scoresFetched", <your callback> )以呈现您的图表

于 2012-08-10T21:53:01.257 回答