6

アプリの上部に小さな黄色の「保存中」/「保存済み」インジケーターメッセージを表示するために、残り火データレコードが現在実行中であるかどうかを示すブールプロパティが必要です。

私はこれを試しました:

App.store = DS.Store.create
  isSaving: (->
    for record in this.get('recordCache')
      if record?.getPath('stateManager.currentState.name') == 'inFlight'
        return true
    return false
  ).property('recordCache.@each.stateManager.currentState.name')

recordCacheしかし、それから私はそれが観察できないことを発見しました。

私はトランザクションを使用せず、のみApp.store.commit()を使用するので、を調べましたApp.store.get('defaultTransaction')が、有用なものは何も得られませんでした。

私はRESTAdapterを使用しているので、この情報を提供するように拡張できれば、それも機能します。

4

3 に答える 3

4

モデル、コントローラー、ビューを拡張してみませんか:

DS.Model.reopen({
    didCreate: function() {
        this.set('persisted', true);
    },
    didUpdate: function() {
        this.set('persisted', true);       
    },

    resetPersistenceFlag: function(){
        this.set('persisted', false);
    }.observes('isDirty')

});

Ember.Controller.reopen({
    contentPersistedObserver: function() {
        if (this.get('content.persisted') === true) {
            //do stuff here
        }  
    }.observes('content.persisted')
});

Ember.View.reopen({
    controllerContentPersistedObserver: function() {
        if (this.get('controller.content.persisted') === true) {
            //do stuff here
        }  
    }.observes('controller.content.persisted')
});​

そうすれば、コントローラー/ビューはモデルがいつ保存されたかを知ることができます。作成/更新コントローラーの場合は起動しますが、アレイを管理するコントローラーの場合は起動しません。

于 2012-10-16T07:35:36.030 に答える
2

通知メッセージの表示を処理するdidUpdateプロパティを使用してベースモデルを作成し、各モデルに拡張させることができます。これは実際には一時的な解決策ですが、当面は機能します。

App.Model = DS.Model.extend
    didUpdate: ->
        # invoke your notification
        alert("All changes saved!")

App.User = App.Model.extend()

ただし、これは更新されるすべてのレコードに対して発生します。したがって、一度に1つ以上の保存された通知を開かないように通知クラスを作成することをお勧めします...しかし、それはあなた次第です。

私は現在、このプルリクエストhttps://github.com/emberjs/data/pull/376からいくつかの基本的なサーバー検証メソッドの実装に取り​​組んでおり、より良い方法を考え出すことを望んでいます。コミットのステータスを監視します(もちろん、私がそうする場合は、ここに投稿します)。

于 2012-09-15T04:35:11.763 に答える
0

これには、はるかに簡単な解決策があります。

App.MyView = Ember.View.extend({

    init: function () {
        this._super();
        var self = this;
        this.get('controller').content.on('didUpdate', function() {
            self.SomeCoolUpdateFunctionForMyView(self.$());
        });
    }
});

self。$()は、ビューのjquery表現を参照します。

于 2013-05-04T00:33:03.917 に答える