1

Ember-Data 0.13-59 および Ember 1.0.0 RC 6 の使用 (スターター キットから)

問題:サーバーから作成さsave()れた新しいレコードに対して を取得し、正常に を返しますが、モデルで新しいレコードを使用できません。App.Userstat.createRecord({ ... })POSTidUserstat

例をよりよく理解するために:これはクイズアプリです(複数選択問題用)。各質問にはいくつかの選択肢があり、ユーザーが選択肢を選択すると、対応する質問に対する選択肢がモデルに保存され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 を使用して検索していますか???

4

1 に答える 1