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

也许这可以帮助你:

初始化应用程序

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 回答
0

如果您一次处理一条记录,则始终可以绑定到模型的isDirty属性。我通常创建一个isClean在控制器上调用的计算属性,它是 的否定isDirty,然后在模板中

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