如何在backbone.js中渲染视图,直到完成多个模型提取?

时间:2012-08-10 19:17:27

标签: jquery backbone.js

我需要显示多行图表。

我需要从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())

1 个答案:

答案 0 :(得分:0)

我一直在等着,看看有人带来的东西比我的方法更清洁。

我想到的唯一解决方案是发送一个信号 evey时间,你完成一个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> )选项或其他任何内容。您还应该听{{1}}来呈现