网格保存和存储重新加载后,ExtJS Grid roweditor仍然很脏

时间:2017-03-08 11:58:12

标签: extjs extjs5

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

我有一个Save按钮,当点击它时获取store.getModifiedRecords()并将这些传递给ajax请求,这个请求成功后会发生一些事情,我做的最后一个动作是再次加载网格存储然后使用最新版本的数据再次填充网格,这很好,似乎按预期工作。

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

我无法理解为什么再次加载商店没有清除与网格列关联的任何脏字段?我尝试了很多事情,例如在ajax请求之前清除商店以及刷新网格视图,我尝试在执行ajax请求之前提交商店更改但是每次我尝试离开页面之后网格保存我拿起roweditor有脏字段:(非常感谢任何帮助。

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

https://fiddle.sencha.com/#view/editor&fiddle/1rmf

小提琴是基本的,复制遵循这些步骤;

  • 编辑第一行年龄,将年龄更改为13
  • 点击保存(我强制商店加载有我们所做更改的数据)
  • 点击'检查roweditor是否为Dirty()值'按钮,查看roweditor isDirty()函数的值,这将返回true

如果查看按钮处理程序,可以深入查看窗体[0] .items.items [2]并查看该字段是否为:true,这就是为什么isDirty()返回true的原因。

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

grid.editingPlugin.getEditor().form.reset();

你也可以通过grid.getPlugins()返回一个arrary来访问插件

更新小提示以显示其正常工作

https://fiddle.sencha.com/#view/editor&fiddle/1rmr

2 个答案:

答案 0 :(得分:2)

在编辑过程中,grid最终会在loadRecord editor上致电form。但是,编辑成功或取消时,编辑器的表格不会被清除。这就是为什么你的脏检查返回false。 网格重新加载数据不会破坏编辑器。这是一个优化。编辑器只创建一次,它们随网格一起被销毁。

答案 1 :(得分:0)

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

顺便看一下您的描述,您可能需要调用刷新商店的Store.sync()方法。

更深入地了解使用ExtJs制作CRUD的方法很多。

我使用"实例"存储,但在某些时候,我不得不将其更改为静态调用,如MyApp.store.Model.save()等。这使您只有一个存储实例避免脏数据。

如果您需要

,请点击我的项目文件夹

https://github.com/guilhermeribeirodev/grizzlyboilerplate/tree/master/src/main/webapp/js/MyApp