新しいコレクション (Choices) を作成するときに、含まれているモデル (MultipleChoiceQuestion) にリンクするプロパティ (例: _question) を設定したい
質問する
820 次
2 に答える
2
これを理解するのにかなりの時間がかかったので、将来誰かがこの問題を抱えた場合に備えて...ここに私が書いたコードがあります.
モデルとは異なり、コレクションの initialize() 関数は 2 つのパラメーターを受け入れることを発見しました。1 つ目はmodels
(コレクションを初期化できるモデルのリストです)。2つ目はoptions
(あなたが欲しいもの)です。しばらくの間、私のコレクションは 1 つのモデルから始まりましたが、その理由がわかりませんでした。options
私はmodels
フィールドに私を渡していたことがわかりました。
含まれるモデル:
m.MultipleChoiceQuestion = Backbone.Model.extend({
initialize: function(){
//NULL as first parameter because we don't want models
this.choices = new c.Choices(null, {
_question: this //this is referring to current question
}); //choices Collection is this
}
});
コレクション
c.Choices = Backbone.Collection.extend({
initialize: function(models, options){
this._question = options._question;
},
model: m.Choice
});
于 2012-12-27T19:46:21.423 に答える
0
私の最初の答えは技術的には機能しますが、コレクションをモデルに保存する(そして適切なOne-> Many、One-> One、Many->Oneの関係を作成する)プラグインがあることが実際にわかりました
https://github.com/PaulUithol/Backbone-relational
そのプラグインを使用して、親の質問を属性として保存します
m.MultipleChoiceQuestion = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'choices', //says to store the collection in the choices attribute
relatedModel: m.Choice, //knows we are talking about the choices models
includeInJSON: true, //when we do toJSON() on the Question we want to show serialize the choices fully
reverseRelation: {
key: 'question', //in the CHOICE object there will be an attribute called question which contains a reference to the question
includeInJSON: false //when we do .toJSON on a CHOICE we don't want to show the question object (or maybe we want to show the ID property in which case we set it to "id")
}
}],
coolFunction: function () {
this.get('choices').each(function(choice){
choice.doSomethingChoicey();
});
}
});
したがって、選択モデルを使用している場合は、親の質問のすべてを完全に参照できます。
m.Choice = m.RelationalModel.extend({
coolFunction: function(){
this.get('question').doSomemethingQuestiony();
var question_numer = this.get('question').get('question_number');
}
});
于 2013-01-17T16:24:26.710 に答える