【问题标题】:Collection models is empty on console.log集合模型在 console.log 上为空
【发布时间】:2012-06-14 21:49:48
【问题描述】:

我在backbone.js 中的集合有问题,我做错了什么。 这是我的模特

var Point = Backbone.Model.extend({
    defaults: {
        x: 0.0,
        y: 0.0,
        z: 0.0,
    },

    validate: function(attrs) {
        if(!isNumber(attrs.x) || !isNumber(attrs.y) || !isNumber(attrs.z))
            return "Discovered NaN point";
        else return null;
    },
});

我的收藏:

var TrackCollection = Backbone.Collection.extend({
    model: Point,
});

还有观点:

var TrackView = Backbone.View.extend({
    initialize: function() {
        _bind('all', this.render, this);
    },

    render: function() {
        console.log(this.collection.models);
        return this
    },        
});

在我的主页视图中我这样做:

var c = new TrackCollection();
c.add({ x: 1, y: 1, z: 1});
c.add({ x: 1, y: 1, z: 1});
c.add({ x: 1, y: 1, z: 1});
var v = new TrackView({
    collection: c,
});
v.render();

为什么是 console.log(this.collection.models);在渲染方法中返回一个空数组? 相反,如果我将其更改为 console.log(this.collection);它返回我的集合对象..

编辑 这里是主页视图

window.HomeView = Backbone.View.extend({

    initialize: function() {
    },

    events: {
        "click #makeIT": "makeIT",
    },

    render: function() {
        $(this.el).html(this.template());
        return this;
    },

    makeIT: function(e) {

        var c = new TrackCollection();
        c.add({ x: 1, y: 1, z: 1});
        c.add({ x: 1, y: 1, z: 1});
        c.add({ x: 1, y: 1, z: 1});

        var v = new TrackView({
            collection: c
        });

        v.render();
    }

});

如果我复制 makeIT 内容并将其放在模型和集合所在的同一文件中,则它可以正常工作

【问题讨论】:

    标签: backbone.js backbone-views


    【解决方案1】:

    您的代码中似乎存在一些语法错误,因为您缺少 .对于下划线绑定方法(_.bind),您的模型视图和集合中有额外的逗号。

    也就是说它似乎对我有用,这是您的代码的快速jsfiddle(我将日志切换为警报)。

    【讨论】:

    • 主视图和模型、集合和视图位于 2 个不同的文件中,所以我尝试将 var c = new TrackCollection(); c.add({ x: 1, y: 1, z: 1}); c.add({ x: 1, y: 1, z: 1}); c.add({ x: 1, y: 1, z: 1}); var v = new TrackView({ collection: c, }); v.render(); 移动到同一个文件中,它可以工作。但是如果我把它放到主视图文件中,它就会停止工作并提醒我零个对象而不是三个。
    • 我不明白为什么它是否在第二个文件中会有区别,但只是为了检查我在本地机器上测试过它,它仍然可以正常工作。您确定它们以正确的顺序加载吗?在您创建阻止正确加载的新视图之前,您的第二个文件中可能存在其他错误。
    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2018-12-04
    • 2019-03-11
    • 2014-08-17
    • 2016-09-15
    相关资源
    最近更新 更多