ExtJS 4 - 更新/刷新单个记录

Mar*_*sar 9 javascript extjs extjs4 extjs-mvc

我有一个困扰我的问题.

我有一个网格,当我点击项目时,我想打开一个窗口来编辑该项目.很标准的东西.问题是,我想确保记录是最新的,因为使用该程序的其他人可能已经更改它甚至删除它.

我可以重新加载商店,但我只想要检查一个特定的记录...所以我想我会去获取数据,建立另一条记录并替换商店中现有的记录,但我真的想知道最好的方法去做这个

请记住RESTful代理对我来说不是一个选项,即使我不知道更新操作是否适用于这种情况(服务器 - >客户端).

编辑:这可能有助于某人:我所做的只是将数据和原始对象从新记录复制到旧记录,然后"提交"更改.为我工作.

谢谢.

Mur*_*rah 5

ExtJS 4.1

我有一个类似的问题,并尝试了一个实验

sStore.load({ id: mskey, addRecords: true });

其中mskey是当前加载记录的uuid.

没有首先删除现有记录(作为实验)并且它更新了与服务器中的新数据具有相同id的现有记录(通过模型 - > REST代理).完善!

我知道你说你没有使用REST代理,但是这可能会帮助那些发现这篇文章的人搜索你的主题名称之类的搜索词(这就是我到达这里的方式!)

所以,看起来'addRecords'意味着添加更新.

仅供参考,默里

  • 不幸的是,这会重置滚动位置并在网格的末尾添加更新的记录.我在这里使用了一个修改过的脚本版本:http://vadimpopa.com/reload-a-single-record-and-refresh-its-extjs-grid-row/ (2认同)

Sim*_*all 4

执行此类操作的最佳方法是在打开窗口的事件中重新加载记录。因此,例如,当您将网格存储中的记录加载到窗口内的表单中时,您可以使用模型从 id 加载。

Item.load(id, { success: function(r) { form.loadRecord(r); } });
Run Code Online (Sandbox Code Playgroud)

保存后,您可能还应该在网格视图上调用刷新,这将重新绘制保存事件中的更改。如果您担心性能,您还可以对存储中的确切记录使用刷新节点(请参阅网格视图文档)。

当然,您不必使用restful代理,您可以使用任何代理,只要它能够加载单个记录即可。

  • 这个解决方案很糟糕,因为您正在内存中创建另一个对象 - 如果您更新新加载的项目,商店中的项目将不同步。 (3认同)