1

Ember ストアでダーティ レコードの存在を追跡しようとしています。

更新を保留しているレコードがないときはいつでもボタンを無効にするために、リンクされたプロパティを持つ「保存」ボタンが必要です。

これを行うにはいくつかの方法があると思いますが、正しい「残り火」の方法を探しています。

ここで最も簡単なアプローチは何ですか? AFAICS 私はできる..

  • プロパティが変更されるたびに手動でグローバル プロパティを設定し、ストアがサーバーに同期されるたびにリセットします

  • ストアのコンテンツに基づいて計算されるコントローラーにプロパティを設定します。このようにできましたが、ストアを更新したときにプロパティが更新されないことがわかりました。

...

hasUpdates: function() {
    console.log('hej!')
    return (this.get('store').get('defaultTransaction.buckets.updated.list.length') > 0);
}.property('store')

これはよくあるパターンです - どうすればいいですか?

編集:うまくいかないことで回答を更新し続けます

  hasUpdates: function() {
    console.log('hej!');
    return (this.get('store').get('defaultTransaction.buckets.updated.list.length') > 0);
  }.property('store._recordsToSave@each')
4

2 に答える 2

0

一度に 1 つのレコードを処理する場合は、いつでもモデルのisDirtyプロパティにバインドできます。私は通常isClean、 の否定であるコントローラーで呼び出される計算されたプロパティを作成しisDirty、次にテンプレートで

<input type="submit" {{bindAttr disabled="isClean"}}>
于 2013-03-20T16:28:32.497 に答える
0

多分これはあなたを助ける:

アプリを初期化する

App = Ember.Application.create({});

App.Store = DS.Store.extend({
  adapter: 'DS.FixtureAdapter'
});

DS.Model.reopenClass({
  dirtyItems: function(){
    return this.filter(function(model) { 
      return model.get('isDirty'); 
    }).get('content');
  }
});

App.Product = DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string')
});

App.Product.FIXTURES = [{id: 1, name: 'Table'}]

それから試してください

App.Product.dirtyItems(); // -> return []

book = App.Product.createRecord({name: 'Book'});
App.Product.dirtyItems(); // -> return [Object]

book.save()
App.Product.dirtyItems(); // -> return []

skate = App.Product.createRecord({name: 'Skate'});
bike = App.Product.createRecord({name: 'Bike'});
App.Product.dirtyItems(); // -> return [Object, Object]

skate.get('store').save()
App.Product.dirtyItems(); // -> return []
于 2013-06-26T16:01:35.943 に答える