0

例として、コレクションであるいくつかのパラメーターを持つモデルがある場合:

var Mdl = Backbone.Model.extend({

  defaults:{
    test: new Backbone.Collection()
  }
});

ここで、このモデルでフェッチを行うとします。サーバー側の応答には、配列である「test」というプロパティがあります。配列をコレクションに追加するか、この配列でリセットしてバックボーン コレクションのままにしたいのですが、モデルでリセットを実行すると、デフォルトではこれが行われません。予想どおり、「テスト」が上書きされます。レスポンス内の配列を持つプロパティ。

応答プロパティ「test」を配列ではなくバックボーン コレクションとして扱うには、どうすればよいですか? 基本的に、プロパティが配列であるかどうかを確認し、プロパティがモデルでコレクションとして既に定義されているかどうかを確認します。そうであれば、このコレクションを上書きするのではなく、配列でリセットします。

独自の Backbone Sync を作成することでこれを行うことができますが、これが最善の方法であるかどうかはわかりません。どう思いますか?

ありがとう。

4

2 に答える 2

0

この種の問題にはBackbone Relationalを使用します。

リレーションを定義するには、次のようなコードを記述します。

Mdl = Backbone.RelationalModel.extend({
    relations: [{
            type: Backbone.HasMany,
            key: 'test',
            relatedModel: 'TestModel',
            collectionType: 'TestCollection',
            reverseRelation: {
                key: 'mdl'
            }
        }]
});

TestModel = Backbone.RelationalModel.extend({});

TestCollection = Backbone.Collection.extend({
    model: TestModel
});

次に、テスト属性をバックボーン コレクションに変換します。

于 2012-05-15T11:11:34.340 に答える
0

この答えを確認Objectsして定義すると、最初に奇妙な問題が発生します。Model.defaults

本当にこれを行いたい場合は、遅延関数で実行してみてください。

// code no tested
var Mdl = Backbone.Model.extend({
  defaults:{
    test: function() { return new Backbone.Collection() }
  }
});

それでも私は良い考えではないとModel.attributes思います.Backboneが期待しているものに基本的な価値観を持つことを本当に好みます.

この場合に私が行うことは、サーバーの JSON 応答を作成して、キーを呼び出しtest_data、それを手動で解析することModel.initializeです。

// code no tested
var Model = Backbone.Model.extend({
  initialize: function(){
    this.test = new Backbone.Collection( this.get( "test_data" ) );
  }
});

このSOの質問を確認してください

Model.get("test_data")が生データであり、実際のオブジェクトが であることを確認してください。Model.testこの最後は に含まれていませんModel.attributes

于 2012-05-15T10:44:42.710 に答える