首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExtJS3 -防止覆盖未正确加载的模型

ExtJS3 -防止覆盖未正确加载的模型
EN

Stack Overflow用户
提问于 2012-03-21 11:09:53
回答 1查看 197关注 0票数 0

如何确保从服务器加载并随后在UI中更改模型(即ExtJS)并发送回服务器的模型被正确保存?

我们在应用程序中看到的问题是,在不正确加载模型的情况下,可以保存模型。这可能会导致保存不完整的模型。

例如,在服务器上,模型具有以下属性:

代码语言:javascript
复制
color: blue
size: 10
weight: 20

用户加载模型,在加载过程中用户进行更改。

代码语言:javascript
复制
color: red

然后拯救。结果,模型在服务器上失去了它的重量和大小属性。请注意,这是对我们的场景的彻底的过度简化。模型要复杂得多,数据量要大得多。

我能想到的策略:

  1. 确保在允许用户保存之前加载所有内容(我认为这是不雅的)。
  2. 跟踪模型中的更改,只保存更改。这不需要完全加载模型,因为只有用户主动编辑的东西才会保存回后端(不知道ExtJS中是否支持这一点)。

有人能给我指明正确的方向吗?是否可以使用Ext.data.Record.getChanges / isModified实现第二种方法?ExtJS是如何处理删除的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-21 11:35:04

当您需要保存一个从未保存过的模型时,您可以这样做:

代码语言:javascript
复制
model.save();

此方法自动调用Ext.data.proxy.Proxy.create()方法。

如果您需要用一些新的数据更新模型,甚至替换现有的数据,您可以这样做:

代码语言:javascript
复制
model.set('property', 'value');

另一方面,这个方法会自动调用Ext.data.proxy.Proxy.update()方法。

然后,您可以使用引用动作状态的模型类常量:

  • Ext.data.Model.EDIT
  • Ext.data.Model.REJECT
  • Ext.data.Model.COMMIT

@charris提供了一个很好的例子,作为对官方文档的评论:

代码语言:javascript
复制
var myStore = Ext.create('Ext.data.Store', {
  model: 'MyApp.model.MyModel',
  listeners: {
    update: function(store, model, operation, eventOptions) {
      if( operation == Ext.data.Model.EDIT ) {
          // Model was edited but not saved...
      }
      else if( operation == Ext.data.Model.COMMIT ) {
          // Model was saved...
      }
    }
  }
});

也许这会对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9803422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档