0

私はかなり複雑なバックボーン モデル構造を持っています。

  • m.質問: 基本的な質問です。これが C++ の場合、その子のみがインスタンス化されるため、「抽象」モデルになります。
  • m.NumericQuestion: m.Question を拡張します
  • m.MultipleChoiceQuestion: m.Question を拡張します
  • m......質問: たくさんの質問タイプがあります
  • c.Questions: m.Question の子のコレクション

データベースに保存されると、それらはすべて「タイプ」と呼ばれる属性を持ち、どのモデルにするかを決定します。

生の質問がサーバーから取得されると、Questions コレクション (c.Questions) に配置されます。バックボーンはサーバーからの応答を解析し、タイプに基づいて適切なモデルを作成する必要があります。

そこで、c.Questions の _prepareModel() 関数を作成しました。

しかし、c.Questions.fetch() を実行すると、Backbone.Collection.prototype._prepareModel (Backbone リレーショナルが持つモデル) が最初に呼び出されることがわかりました。モデルの作成を事前に傍受する方法はありますか?

4

1 に答える 1

1

モデルのparse機能をオーバーライドします: http://backbonejs.org/#Model-parse

コレクションに対してもこれを行うことができます: http://backbonejs.org/#Collection-parse

そのようです:

var MyModel = Backbone.Model.extend){
    parse: function(resp) {
        // your parse function returns the attributes that you want your new model to have
    }
});

コレクションの場合、parse属性オブジェクトの配列を返す必要があります。

取得後に属性をさらに操作したい場合は、次のように属性を別のバックボーン モデルにするなど、 で凝ったことを行うことができます。initialize

initialize: function() {
    this.set('attributeThatIsAnArray',new MyCollection(this.get('attributeThatIsAnArray')));
}

別の例 については、この他のスタック オーバーフローの質問を確認できます: JSON データを子コレクションを持つバックボーン モデルに変換する

于 2013-01-24T21:17:22.823 に答える