Ember-Data 0.13-59 および Ember 1.0.0 RC 6 の使用 (スターター キットから)
問題:サーバーから作成さsave()
れた新しいレコードに対して を取得し、正常に を返しますが、モデルで新しいレコードを使用できません。App.Userstat.createRecord({ ... })
POST
id
Userstat
例をよりよく理解するために:これはクイズアプリです(複数選択問題用)。各質問にはいくつかの選択肢があり、ユーザーが選択肢を選択すると、対応する質問に対する選択肢がモデルに保存されApp.Userstat
ます。
各質問で、アプリは、ユーザーがこの質問に既に回答したかどうか、またはそれが新しいかどうかを知る必要があります。
計算されたプロパティをsetter
およびとして使用しgetter
ます。はsetter
、ユーザーが選択肢を選択したときに呼び出されます (選択肢の値は算出プロパティに渡されます)。最初に、ユーザーの現在の質問に対するレコードが存在するかどうかを確認します。存在しない場合は、新しいレコードが作成されます。存在する場合は、PUT
コンテンツが更新されたリクエストのみを発行する必要があります。
コード更新(7月8日午前11時)
App.UserstatsController = Ember.ArrayController.extend();
App.QuestionController = Ember.ObjectController.extend({
needs: "userstats",
chosen = function(key, value) {
// getter
if(value === undefined) {
// something goes here
// setter
} else {
// the question.id is used to compare for an existing record in Userstat mdoel
var questionId = this.get('id');
var questionModel = this.get('model');
// does any Userstat record belong to the current question??
var stats = this.get('controllers.Userstats');
var stat = stats.get('model').findProperty('question.id', questionId);
// if no record exists for stat, means user has not answered this question yet...
if(!stat) {
newStat = App.Userstat.createRecord({
"question" : questionModel,
"choice" : value // value passed to the computed property
)}
newStat.save(); // I've tried this
// newStat.get('store').commit(); // and this
return value;
// if there is a record(stat) then we will just update the user's choice
} else {
stat.set('choice', value);
stat.get('store').commit();
return value;
}
}.property('controllers.Userstats')
初めてモデルにレコードを追加することはないため、何回設定chosen
しても (PUT 要求のみを送信する更新とは対照的に) 常に送信します。POST
さらにデモンストレーションするにsetter
は、計算されたプロパティの部分で、このコードを配置すると:
var stats = this.get('controllers.Userstats')
console.log stats
Userstats コントローラーは、以前に存在したすべてのレコードを表示しますが、新しく送信されたレコードは表示しません!
私save()
またはcommit()
それの後に新しいレコードが利用できないのはなぜですか???
ありがとう :)
編集
特異なモデルにレコードを追加したことと関係があるのかもしれませんが、App.Userstat
それを探すときは、配列コントローラーである UserstatsController を使用して検索していますか???