2012-05-13 7 views
8

私は単純な答えがあると思う何かを達成しようとしていますが、何とかソースコードember-dataを見つけられません。トランザクションがコミットされた後にコールバックを設定する

特定の一連の変更がデータストアにコミットされた後でアクションをトリガーしたいと思います。この私の現在のコード:

var transaction = App.store.transaction(); 
user = App.get('currentUser'); 
transaction.add(user); 
user.set('name', "Michael Jackson"); 
transaction.commit(); 
App.navigate('dashboard'); 

私の最初の試みは、このユーザーのisDirtyプロパティを超えるオブザーバを追加することでしたが、a)は、それは慣用いないようですし、もっと重要なのはB)私が手動でオブザーバを削除する必要がありますいくつかの例外が間に発生し、削除されないなど、エラーが発生しやすくなります。

アイデア?あなたはどうしますか?

答えて

6

モデルでdidCreateとdidUpdateを使用できます。私はあなたのようなユーザーモデルを持っていると仮定しています:

MyApp.User = DS.Model.extend({ 
    first: DS.attr('string'), 
    page: DS.attr('string'), 
    didUpdate: function() { 
    //Do something 
    }, 
    didCreate: function() { 
    //do something 
    } 
}); 
+0

うわー。私はとても馬鹿だと感じる。前にこれを見つけられなかった:| - それはreadmeの右です! https://github.com/emberjs/data#record-lifecycle ありがとうございます! – josepjaume

+7

事は、このロジックはモデル自体に属していないということです。その特定のコンテキストに属している必要があります。 エンバーは最近、このような場合に有用であるかもしれない1回限りのイベントのコールバックを導入:https://github.com/emberjs/ember.js/commit/1809e65012b93c0a530bfcb95eec22d972069745#L0R19 だから私は簡単にできます。 model.one ( 'didCreate'、function(){何​​でも}); – josepjaume

+2

どのモデルでも、コミットが発生したときにのみロールするグローバルAJAXローダーイメージを作成したいと思います。これはどうすればできますか? –

関連する問題