0

我在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 内容并将其放在模型和集合所在的同一文件中,则它可以正常工作

4

1 回答 1

0

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

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

于 2012-06-14T22:07:31.750 回答