1

次のように、Ember アプリに定期的な自動保存機能を実装しました。

var App = Ember.Application.create({
    ready: function () {
        setInterval(function() { App.store.commit(); }, 10000);
    }
});

サーバーへのすべての変更を定期的にフラッシュして、うまく機能します。しかし、イベントがユーザーに発生していることを視覚的に示すために、どうすればイベントにフックできるのでしょうか?

ほとんどの場合、 App.store.commit() は実際には何もする必要がなく、たとえそうであったとしても、それは非同期的に行われます - commit() はすぐに戻ります、リクエストが生成される前。

4

1 に答える 1

3

それは本当ですcommitその進行状況を示していません。モデルのセットアップdidCreatedidUpdateコールバックを行って、アプリに変更通知を挿入します。

Ember-Data トランザクション モデルの性質上、commitが要求された場合とされなかった場合で多くのことが発生する可能性があります。コールバック通知は、適切なユーザー向けメッセージにまとめるか調整する必要があるでしょう。

DIY の代替手段: isSaving プロパティと afterSave オブザーバーを作成する

コントローラーで、計算されたプロパティと監視を使用して、isSaving状態の特定のデータ モデルを監視します。

// Example of a data model with a belongsTo association & nested hasMany
isSaving: function() {
  return this.get('isSaving') || (
    !Ember.empty(this.get('association')) && (
      this.get('association.isSaving') || 
        this.get('association.nestedAssociation').some(function(item) { return item.get('isSaving'); })
    )
  );
}.property("isSaving", "association.isSaving", "association.nestedAssociation.@each.isSaving"),

afterSave: function() {
  if (this.get('isSaving')) return;
  // do something interesting
}.observes('isSaving')

これは、ember-data のジェネリック、グローバルisSaving、またはisInFlight状態と比較するとダーティですが、実際には非常にうまく機能します。

于 2012-09-27T04:45:03.570 に答える