我在backbone js中创建了一个集合,在从后端获取数据后,我在chrome的控制台检查器中打印,但是属性中的一些东西引起了我的注意。
集合中有模型,每个模型里面有一个属性叫“collections”,这个里面有一个属性叫“models”等等
我还没有与视图进行交互,只创建了一个集合并获取了数据。
这是在控制台中发生的情况:
这是我用来解析的代码:
var TablesCollections = Backbone.Collection.extend({
model: Table,
url: '/api/tables',
parse: function(response) {
if(response.procced == 7) {
return response.data;
} else {
return "An error has trigger";
}
},
initialize: function() {
this.fetch();
}
});
这是模型:
var Table = Backbone.Model.extend({
defaults: {
'title': '',
'titlestring' : '',
'schema': {},
'manageschema': {},
},
parse: function(response){
if(response.proceed){
if(response.proceed == 4){
response.data.schema = JSON.parse(response.data.schema);
response.data.manageschema = JSON.parse(response.data.manageschema);
response = response.data;
}
} else {
if(response.schema != 'Na'){
response.schema = JSON.parse(response.schema);
}
if(response.manageschema != 'Na'){
response.manageschema = JSON.parse(response.manageschema);
}
}
return response;
},
});
为什么在模型中嵌套了集合的多个副本?
1条答案
按热度按时间lymnna711#
这是正常的。每个添加到集合中的 Backbone.js 模型都有一个对所属集合的引用。(通过
this.collection
访问,其中this
是模型)您在控制台中看到的是一个循环引用。集合具有模型。每个模型都具有对集合的引用。同一集合具有相同的模型,这些模型具有对集合的相同引用,等等...
模型的构造函数文档:
model.collection
属性通常是在您第一次将模型加入至集合时自动建立的。在截图中,你可以看到
cid: "c8"
,这是Backbone添加到模型和集合中的 client id,这表明每次都是相同的模型引用。