2013-01-13 8 views
13

後、私は、その内容がそのようにルートで定義されているArrayControllerを持って更新されません。一覧はdeleteRecord

私は新しいアイテムを作成した場合、それはテンプレート内に自動的にリストに追加されます。

App.UsersNewRoute = Ember.Route.extend({ 
    model: function() { 
    return App.User.createRecord({firstName: '', lastName: ''}); 
    } 
}); 

しかし、私は、「編集」ビュー内の項目を削除すると、それは動作しません。

App.UsersEditController = Ember.ObjectController.extend({ 
    ... 

    destroy: function() { 
    this.get('content').deleteRecord(); 
    this.get('store').commit(); 
    this.transitionToRoute("users.index"); 
    } 
}); 

しかし、「新規」ビューでは、作成した新しいアイテムを削除すると、コミットせずに機能します。

編集コントローラでは、「コミット」を削除するとリストが更新されますが、別の操作を行うとリストがリロードされ、削除されたアイテムが再び表示されます(通常)。

アイテムを削除するにはどうすればよいですか?

注:emberとember-dataの「マスター」コードを使用していますが、今更新しました。

+1

私はすでに同じ種類の問題に遭遇しました。私はあなたがページをリフレッシュすると、削除されたアイテムはもうここにないと思いますか?ただし、コミット中にこのレコードを含むサーバーの応答はありますか? –

+1

はい!それは誤りです。レールサーバーでは、 "render json:user"というオブジェクトを返しました。 "render json:nil、status::ok"とすればOKです!どうもありがとう。 –

+1

ファイン:)これは実際に追跡するのが非常に難しいエラーです。 (hasMany/belongsの場合)2つのリクエストはサーバに送られますが、親の変更は子の削除の前に実行されます。その結果、Emberのデータの場合、親の応答が来ると、常に子供が...ブーム... –

答えて

1

コミットが非同期に行われるため、レコードが削除された後にのみ移行する必要があります。

var user = this.get("content"); 

user.one("didDelete", this, function() { 
    this.transitionTo("users.index"); 
}); 

user.deleteRecord(); 
user.get("transaction").commit(); 

また、トランザクションをコミットすることは、ストアをコミットするよりも優先されます。後でレコードを自分のトランザクションに追加することにした場合、処理する作業が少なくなります。そうしないと、店舗に入ると同じdefaultTransactionがそのまま使用されます。

2

非常に異なる状況下で同様の問題が発生しました。

私は "​​"を使用しています(CoffeeScriptとEmberを使用している場合は強くお勧めします)。 Ember Dataのバージョンには、適切に削除されたレコードがキャッシュ内に残っていてリストから削除されない不思議なバグがありました。

私は、何が起こっているかを正確に把握する時間がありませんでした。 Ember Data(2013-05-10 10:20:34 -0700)の最新ビルドを入手しようとしましたが、すぐに問題が修正されました。

誰かが同様の問題に遭遇した場合のためにここに投稿してください。

また、Jakub Arnold氏は、「ストア」をコミットせず、クリーンな状態を確保するためにイベントリスナーを使用していると話しています。ちょうど今日、私は主題 "Patterns and anti-patterns for Ember Data"の非常に有用なブログエントリを見つけました。