我正试图跟踪我的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')
答案 0 :(得分:0)
如果您一次处理一条记录,则始终可以绑定到模型的isDirty
属性。我通常在控制器上创建一个名为isClean
的计算属性,它是isDirty
的否定,然后在模板中
<input type="submit" {{bindAttr disabled="isClean"}}>
答案 1 :(得分: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 []