3

hasMany 関係の 1 つがサーバーに POST を返していません。双方向の関係をどのようにモデル化することになっていますか?

関連するオブジェクトは次のとおりです。

Encompass.Selection = DS.Model.extend({
  text: DS.attr('string'),
  submission: DS.belongsTo('submission', {inverse: 'selections'}),
});

Encompass.Submission = DS.Model.extend({
  shortAnswer: DS.attr('string'),
  selections: DS.hasMany('selection'),
  testing: DS.hasMany('folder'),
  workspaces: DS.hasMany('workspace'),
});

およびコントローラー アクション:

testing2: function() {
  var submission = this.get('model');
  console.log(submission.get('selections.length'));
  var newSelection = this.get('store').createRecord('selection', {
    text: 'testing2 selection' + new Date().getMilliseconds(),
    submission: submission,
    coordinates: 'bogus coords',
    workspace: this.get('currentWorkspace')
  });
  //newSelection.save();
  console.log(submission.get('selections.length'));
  submission.save();
},

testing2 アクションを実行すると、コンソールには、提出物に最初に 1 つの選択肢があり、次に 2 つ目の選択肢があることが示されます。メソッドはsave()投稿をトリガーしますが、選択オブジェクトがありません:

  {
    submission: {
      shortAnswer: "short", 
      testing:     [],
      workspaces:  ["5271d0147205f15e31000001"]
    }
  }

逆マッピングを削除して追加しようとしました。奇妙な部分は、他の hasMany 関係が機能することです。

機能することがわかった唯一のことは、submissionからフィールドを削除することSelectionです。

4

2 に答える 2

0

hasMany が返されないケースの 1 つを次に示します。

save() 操作からシリアル化された json に、設定したばかりのデータが含まれていないことが時々ありますが、これは本当に不可解でした。

selection.set('workspace', workspace)
selection.save()

json は次のようになります。

{ 
 id: 02314892038,
 workspace: undefined,
 isTrashed: false
}

ワークスペースは設定中ですが、今はまだです。それを設定する約束があり、バックエンドで必要な場合はそれを待つだけです。

selection.set('workspace', workspace);
selection.get('workspace').then(function(){
  selection.save();
});

したがって、本質的に非決定論的な動作が見られる場合があります。

  • このメソッドで機能します/ここではないのはなぜですか
  • 私のために働く
  • 働いていた

これは、セットに続くセーブだけに適用されるわけではありません。以前からデータがロードされたが、何らかの理由で関係が完全ではないというケースを見てきました。

満たされていないリレーションシップの ID をシリアル化できない理由がわかりません (ID は常にわかっているため、JSON に必要なのはそれだけです)。

于 2014-05-29T16:22:13.523 に答える
0

私は同じ問題を抱えています。DS.belongTo ステートメントを削除しようとしましたが、効果はありませんでした。モデルの「保存」機能を使用して、サーバーへのメッセージをトリガーしました。別のメッセージ (hasMany レコードを含む) がサーバーに送信される可能性があるトリガーの別の方法があるかどうか疑問に思っています。

于 2013-11-09T02:36:42.910 に答える