2017-05-10 6 views
0

私はember-dataでモデル化した.Net WebAPIからのペイロード(追加フィールド)を持つ多対多の関係テーブルを持っています。このテーブル/リレーションシップにレコードを追加すると、ユーザーがブラウザページの更新を実行するまで、メモリ内に保持される追加レコードが作成されます。私のモデルは次のとおりです。Ember-dataはメモリ内に余計なレコードを作成します

// student.js 
export default DS.Model.extend({ 
    name: DS.attr('string'), 
    studentsClasses: DS.hasMany('student-class') 
}) 

// class.js 
export default DS.Model.extend({ 
    desc: DS.attr('string'), 
    studentsClasses: DS.hasMany('student-class') 
}) 

// student-class 
export default DS.Model.extend({ 
    studentId: DS.attr('string'), 
    student: DS.belongsTo('student'), 
    class: DS.belongsTo('class'), 
    grade: DS.attr('number') // payload 
}) 

ここでは、多くのレコードを作成して追加するためのコードです。

let newRecord = this.get('store').createRecord('student-class'); 
newRecord.studentId = 1; 
newRecord.grade = 3; 
class.get('studentsClasses').pushObject(newRecord); 

新しいレコードを作成して、コメントを追加し、私は同じページに戻ってくるとclass.studentClasses配列内の余分なレコードがあるまですべてが、画面上でよさそうだます。

なぜember-dataがメモリに余分なレコードを作成しているのか、どうすればいいのですか? ありがとう

答えて

1

あなたが言ったように、ember-dataはレコードをメモリに保持します。そして、あなたはember-dataがそれ自身のレコードを削除することはないということを心に留めておく必要があります。それは自分でメモリから削除することができます。ページのリフレッシュまたは同じIDプロパティを持つ場合は新しいペイロードに置き換えられます。 chromeやfirefoxなどのブラウザ用のemberデバッグプラグインを使用すると、その動作を確認できます。

あなたのケースでは、新しいレコードをstore.createRecord()で作成しました。この瞬間、あなたの記憶にすでにこのレコードが追加されていて、あなたのクラスレコードにプッシュされました。これらのモデルを正常に保存しなかった場合は、「ダーティー」状態になります。ストアメモリをクリーニングしない場合(副作用のあるstore.unloadRecord()などを使用するか、関連モデルからこの未保存の新しいレコードを削除します) )、次回にstore.findRecord()を使用してレコードを検索すると、役に立たないレコードをstore.findRecord('class', 1, {reload: true})のように再ロードすると、メモリ内の既存のデータが優先されます。

このクラスページに入るときに、このクラスモデルを強制的にリロードすることをお勧めします。

関連する問題