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); render メソッドでは、空の配列が返されますか? 代わりに、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 に答える