Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 忽略数据中已更改的记录_Ember.js_Ember Data - Fatal编程技术网

Ember.js 忽略数据中已更改的记录

Ember.js 忽略数据中已更改的记录,ember.js,ember-data,Ember.js,Ember Data,您如何可以忽略在带有余烬数据的余烬JS视图中更改的记录? 类似于delete,但不从持久存储中实际删除它 我想App.store.removeFromRecordArrays(record)将起作用。1)您可以使用事务并回滚该事务 2) 或者,您可以使用记录的statemanager回滚记录 if(record.isDirty) record.get('transaction').rollback(); 例如,您可以循环存储记录缓存中的所有记录,并回滚所有脏记录 我个人在视图中的willD

您如何可以忽略在带有余烬数据的余烬JS视图中更改的记录? 类似于delete,但不从持久存储中实际删除它

我想
App.store.removeFromRecordArrays(record)将起作用。

1)您可以使用事务并回滚该事务

2) 或者,您可以使用记录的statemanager回滚记录

if(record.isDirty)
  record.get('transaction').rollback();
例如,您可以循环存储记录缓存中的所有记录,并回滚所有脏记录

我个人在视图中的willDestroyElement事件上使用记录回滚机制,因此如果用户离开视图,他将被要求保存脏记录

PatientTransport.FirmView = Ember.View.extend({
  templateName: 'firm-view',

  willDestroyElement: function() {
    if (this.getPath('controller.content.isDirty')) {
      var self = this;
      Bootstrap.ConfirmBox.popup({
        heading: "Some data has changed.",
        message: "Do you want to save changes?",
        callback: function(options, event) {
          if (options.primary) {
            self.getPath('controller.content.transaction').commit();
          } else {
            self.getPath('controller.content.transaction').rollback();
          }             
        }
      });   
    }     
  }
});

如果此模型存在这种情况(已删除客户端但不删除服务器端),则可以使用标志扩展DS.Model。此外,还有一种方法可以方便地设置此状态(调用model.deleteLocal())

然后需要在适配器中自定义deleteRecords方法

DS.YourAdapter.reopen({
      deleteRecord: function(store, type, model) {
          if (!model.get('deleteLocalFlag') {
              // code for deleting in persitence layer
          } 
          store.didDeleteRecord(model, model.toJSON({associations: true}));
      }
});
警告:此代码未经测试,但在我的头脑中工作;)


可能更干净的解决方案是使用对象的stateManager并转换到不同的状态,而不是设置标志。但是我发现stateManager周围的代码很难理解,可能不值得这么麻烦。

我想你可以使用
commit
解决方案,类似于我第一次找到记录时使用的:
record=App.store.findQuery(recordClass,query)
,然后我对
记录执行修改,有时在我更改属性后,我想忽略这些更改。我不能使用事务在持久层中查找某些内容,就好像它们创建了一个全新的存储。你能
Em.copy
该记录吗,这样你就不会接触你的收藏?然后,编辑完成后,可以将其合并回集合中的记录,也可以将其丢弃。我在我的编辑场景中做了类似的事情(尽管我仍然没有使用ember data atm)
DS.YourAdapter.reopen({
      deleteRecord: function(store, type, model) {
          if (!model.get('deleteLocalFlag') {
              // code for deleting in persitence layer
          } 
          store.didDeleteRecord(model, model.toJSON({associations: true}));
      }
});