Javascript 单主干视图中的多个集合
我正在编写一个主干应用程序,它执行OLS回归,并从两个不同的JSON在两个单独的集合中提取数据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_
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()
函数,我将如何解决这个问题?