2

私は次のようなモデルを持っています:

var Playlist = Backbone.Model.extend({
    defaults: function() {
        return {
            id: null,
            items: new PlaylistItems()
        };
    }
});

ここで、PlaylistItemsはBackbone.Collectionです。

プレイリストオブジェクトを作成した後、saveを呼び出します。

playlist.save({}, {
    success: function(model, response, options) {
        console.log("model:", model, response, options);
    },
    error: function (error) {
        console.error(error);
    }
});

ここでは、私のモデルはBackbone.Modelオブジェクトです。ただし、その子であるitemsは、Backbone.CollectionではなくArray型です。

これは予期しない動作でした。私は何かが足りないのですか?または、配列を新しいBackbone.Collectionに手動で渡して、これを自分で初期化する必要がありますか?

4

1 に答える 1

4

これは、サーバーが何を期待していて、何に応答するかによって異なります。バックボーンは、属性itemsがバックボーンコレクションであり、それをどう処理するかを認識していません。サーバーによっては、このようなものが機能する場合があります。

 var Playlist = Backbone.Model.extend({
    defaults: function() {
        return {
            id: null,
            items: new PlaylistItems()
        };
    },
    toJSON: function(){
        // return the json your server is expecting.
        var json = Backbone.Model.prototype.toJSON.call(this);
        json.items = this.get('items').toJSON();
        return json;
    },
    parse: function(data){
        // data comes from your server response
        // so here you need to call something like:
        this.get('items').reset(data.items);
        // then remove items from data: 
        delete data.items;
        return data;
    }

});
于 2013-02-01T03:05:29.990 に答える