4

私は Backbone JS を初めて使用し、 Christopher Coenraets Wine Cellar tutorialに従っています。

それはすべてうまく機能this.model.modelsしますが、this.collection. さらに、コードを後者に変更しようとすると、this.collection未定義のように見えます。

window.WineListView = Backbone.View.extend({

    tagName:'ul',

    initialize:function () {
        this.model.bind("reset", this.render, this);
    },

    render:function (eventName) {
        _.each(this.model.models, function (wine) {
            $(this.el).append(new WineListItemView({model:wine}).render().el);
        }, this);
        return this;
    }

});
4

1 に答える 1

6

次の 2 つのことがあなたをがっかりさせます。

  • 必要に応じて、コレクションをビューに挿入できます。通常はコレクション属性を渡す方法ですが、ここではモデルとしてルーターに渡します。

    this.wineList = new WineCollection();
    this.wineListView = new WineListView({model:this.wineList});
    
  • collection.modelsは、コレクション内のモデルの生の配列を保持します

    models collection.models コレクション
    内のモデルの JavaScript 配列への raw アクセス。通常は get、at、または Underscore メソッドを使用してモデル オブジェクトにアクセスしますが、配列への直接参照が必要になる場合もあります。

ビューで使用する場合this.collectionは、ルーターを次のように変更する必要があります。

this.wineList = new WineCollection();
this.wineListView = new WineListView({collection: this.wineList});

そして、あなたはそれを次のように使うことができます

window.WineListView = Backbone.View.extend({
    tagName: 'ul',

    initialize: function () {
        this.collection.bind("reset", this.render, this);
    },

    render: function (eventName) {
        // Backbone proxies Underscore methods on collections
        // _.each(this.collection.models, function (wine) {

        this.collection.each(function (wine) {
            $(this.el).append(new WineListItemView({model: wine}).render().el);
        }, this);

        return this;
    }
});
于 2013-01-04T12:17:14.330 に答える