backbone.js 为什么在模型中嵌套了集合的多个副本?

kokeuurv  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(128)

我在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;
    },
});

为什么在模型中嵌套了集合的多个副本?

lymnna71

lymnna711#

这是正常的。每个添加到集合中的 Backbone.js 模型都有一个对所属集合的引用。(通过this.collection访问,其中this是模型)
您在控制台中看到的是一个循环引用。集合具有模型。每个模型都具有对集合的引用。同一集合具有相同的模型,这些模型具有对集合的相同引用,等等...
模型的构造函数文档:
model.collection属性通常是在您第一次将模型加入至集合时自动建立的。
在截图中,你可以看到cid: "c8",这是Backbone添加到模型和集合中的 client id,这表明每次都是相同的模型引用。

相关问题