在网格保存和存储重新加载后,ExtJS网格行编辑器仍然脏

在网格保存和存储重新加载后,ExtJS网格行编辑器仍然脏,extjs,extjs5,Extjs,Extjs5,我使用的是ExtJS 5.1.3,我有一个网格,它是从一个有模型的商店加载的。网格设置为使用plugin roweditor,因此我编辑了一个单元格并给它一个新值,此时红色的勾号显示该单元格已更改 我有一个保存按钮,单击该按钮可以获取store.getModifiedRecords()并将其传递给ajax请求,在该请求成功后,会发生一些事情,我所做的最后一个操作是再次加载网格存储,然后用最新版本的数据再次填充网格,这很好,并且似乎按照预期工作 由于这是一个多页应用程序,当用户离开此页时,我也会进

我使用的是ExtJS 5.1.3,我有一个网格,它是从一个有模型的商店加载的。网格设置为使用plugin roweditor,因此我编辑了一个单元格并给它一个新值,此时红色的勾号显示该单元格已更改

我有一个保存按钮,单击该按钮可以获取store.getModifiedRecords()并将其传递给ajax请求,在该请求成功后,会发生一些事情,我所做的最后一个操作是再次加载网格存储,然后用最新版本的数据再次填充网格,这很好,并且似乎按照预期工作

由于这是一个多页应用程序,当用户离开此页时,我也会进行检查,这是为了捕获任何未保存的网格更改,因此基本上我从该页获取任何表单并验证isDirty()值,这就是我发现问题的地方,roweditor返回为脏,这是因为有些列有编辑器,ExtJS在这些字段上使用表单验证

我不明白为什么再次加载存储时没有清除任何与网格列相关的脏字段?我尝试过很多事情,比如在ajax请求之前清除存储并刷新网格视图,我尝试过在ajax请求之前提交存储更改,但每次尝试在网格保存之后离开页面时,我都会发现roweditor有脏字段:(非常感谢任何帮助)

编辑:在一个简单的小提琴上复制

小提琴是最基本的,要按照这些步骤进行复制

  • 编辑第一行年龄,将年龄更改为13
  • 单击Save(我正在强制存储加载包含我们所做更改的数据)
  • 单击“检查roweditor是否脏()值”按钮查看roweditor isDirty()函数的值,这将返回true
如果查看按钮处理程序,可以深入到表单[0].items.items[2],并查看此字段是否有dirty:true,这就是isDirty()返回true的原因

解决方案

如接受答案中所述,在我的情况下,roweditor不受存储编辑/取消或加载的影响。单击“保存”时,我所做的是获取网格,然后是编辑器及其表单,并在此上调用reset(),以便有效地再次同步所有内容

grid.editingPlugin.getEditor().form.reset();
您还可以通过grid.getPlugins()访问插件,它返回一个数组

更新小提琴以显示其工作


我将尝试回答我使用全ExtJS桌面应用程序的体验

通过快速查看描述,您可能需要调用刷新存储的Store.sync()方法

更深入地看,有很多方法可以使用ExtJs制作CRUD

我一直在使用store的“实例”,但在某一点上,我不得不将其更改为静态调用,如MyApp.store.Model.save()等,这使得您只有一个store实例来避免脏数据

这是我的项目文件夹,如果你需要的话


在编辑过程中,
网格
最终将调用
编辑器
表单
上的
加载记录
。但是编辑成功或取消后,编辑器的表单不会被清除。这就是为什么对脏度的检查返回false。
网格重新加载数据并不会破坏编辑器。这是一种优化。编辑器只创建一次,并随网格一起销毁。

请以a的形式举例,否则我们不知道您到底在尝试做什么。已用小提琴更新:)我确实有一些想法,认为这可能与它有关。commitChanges()我在一些地方尝试了store.commitChanges(),但没有做任何事情,几乎就好像roweditor与store Load是分离的一样。这很有意义,所以我需要一种方法,在用户单击“保存”时“重置”编辑器窗体。我已经在我的应用程序上通过控制台手动测试了这一点,在这里我编辑并保存了一条记录,然后在切换页面之前我调用editor.form.reset()并导航到别处,现在我看不到编辑器关于未保存更改的任何警告,我现在应该有足够的知识将其应用到我的应用程序代码中,添加后我将进行更新,谢谢:)能够根据您的评论进行必要的更改,已更新问题以显示我的解决方案。非常感谢您的帮助:)