我用Backbone创建了一些像以前用Java做的对象。
var Lead = Backbone.Model.extend({
defaults: {
lng: 0,
lat: 0,
distance: 0
},
initialize: function () {
}
});
var Leads = Backbone.Collection.extend({
model: Lead
});
var Map = Backbone.Model.extend({
defaults: {
leads: null
},
initialize: function () {
this.set("leads",new Leads());
},
addJson: function (json) {
var key;
for (key in json) {
if (json.hasOwnProperty(key)) {
var lead = new Lead({ lng: parseFloat(json[key].lng.replace(",", ".")), lat: parseFloat(json[key].lat.replace(",", ".")), distance: json[key].distance });
this.attributes.leads.add(lead);
}
}
}
});
正如您所看到的,对象Map的属性引导是一个Collection Leads,当它被创建时。但是,这不像Java那样有效,因为我不得不使用:
this.attributes.leads
调用attribut lead的方法之一。
问题:
使用对象作为属性是不好的做法,如果是,我该怎么办?
答案 0 :(得分:5)
你应该能够在你的循环中做this.get('leads').add(lead)
;在这种情况下,this.get('leads)
将返回(引用)具有leads
方法的add()
集合。您无法执行this.leads.add
,因为this.leads
不存在。
Backbone的this.attributes
是获取模型所有属性的便捷方式,但是this.set()
和this.get()
首选作为接口,因为在调用这些属性时会触发事件。