Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单主干视图中的多个集合_Javascript_Backbone.js - Fatal编程技术网

Javascript 单主干视图中的多个集合

Javascript 单主干视图中的多个集合,javascript,backbone.js,Javascript,Backbone.js,我正在编写一个主干应用程序,它执行OLS回归,并从两个不同的JSON在两个单独的集合中提取数据 var Ads_Per_Day = Backbone.Collection.extend({ model: DataModel, url: 'assets/ads_per_day.json' }); var ads_per_day = new Ads_Per_Day() ads_per_day.fetch({ reset:true }); var Age_Per_

我正在编写一个主干应用程序,它执行OLS回归,并从两个不同的JSON在两个单独的集合中提取数据

var Ads_Per_Day = Backbone.Collection.extend({
    model: DataModel,
    url: 'assets/ads_per_day.json'
  });
var ads_per_day = new Ads_Per_Day()
  ads_per_day.fetch({
    reset:true
  });

var Age_Per_Day = Backbone.Collection.extend({
    model: DataModel,
    url: 'assets/age_all.json'
  });
var age_per_day = new Age_Per_Day()
  ads_per_day.fetch({
    reset:true
  });
我尝试使用以下方法在单个视图中包含两个包含JSON的集合:

var dataView = new DataView({
  collection: {
    ads: ads_per_day,
    age: age_per_day
  },
  model: choiceModel,
  el: '#content'
});
我初始化集合的两个部分,如下所示:

var DataView = Backbone.View.extend({
    initialize: function(){
      this.ads = this.collection.ads;
      this.age = this.collection.age;
      this.listenTo(this.ads, 'reset', this.render);
      this.listenTo(this.model, 'change', this.update);
      this.parser = d3.time.format('%Y-%m-%d').parse;
    },
似乎可以使用分配的名称引用任何一个集合,但当我单独调用集合上的map时,数据仅从第一个JSON返回。不仅“x”和“y”包含数据,而且“a”和“b”来自错误的JSON,它们包含数据,但不包含this.age集合中的JSON

getData: function(){
      var parse = this.parser;
      var xVar = this.model.get('x');
      var yVar = this.model.get('y');
      var aVar = this.model.get('a');
      var bVar = this.model.get('b');

      return this.ads.map(function(model){
        return {
          x: parse(model.get(xVar)),
          y: model.get(yVar),
        };
      })

      return this.age.map(function(model){
        return {
            a: parse(model.get(aVar)),
            b: model.get(bVar)
        };
      })
    }

当它们都包含在一个视图中时,如何引用正确的集合?

正如您所知,问题是您从
.getData()
返回了两次。您正在询问如何最好地解决这个问题,这里有一种方法可以将
.getData()
一分为二,而不是在一个数组中返回两个映射。您还可以使用主干网的
.toJSON()
方法去除大部分变量。最后,下划线允许您指定上下文,因此不必重命名此语法分析器

getData: function(){
  var attrs = this.model.toJSON();

  var adsMap = this.ads.map(function(model) {
    return {
      x: this.parser(model.get(attrs.x)),
      y: model.get(attrs.y),
    };
  }, this);

  var ageMap = this.age.map(function(model){
    return {
        a: this.parser(model.get(attrs.a)),
        b: model.get(attrs.b)
    };
  }, this);

  return [adsMap, ageMap];
}

当然,哪种解决方案更好取决于您的需要:)

当我使渲染函数依赖于“this.listenTo(this.age,'reset',this.render);”而不是this.ads时,它会像应该的那样渲染,但仍然从this.ads集合返回数据。因此
getData
this.ads.map(…)
返回数组,而不调用/继续调用
this.age.map(…)
。我相信调用
this.age.map()
是因为'a'和'b'都有分配给它们的数据,只是碰巧它们包含的数据来自
this.ads.map()
函数中
getData
中处理的JSON,
this.age.map(…)
没有被调用。您可以使用
this.age.map(…)
中的
console.log(…)
对其进行双重检查
this.ads.map(…)
在调用
this.age.map(…)
之前返回。你完全正确。如果有两个独立的
getData()
函数,我将如何解决这个问题?