ExtJS 4-更新/刷新单个记录
ExtJS 4 - Update/Refresh single record
我遇到了一个困扰我的问题。
我有一个网格,当我点击一个项目时,我想打开一个窗口来编辑该项目。相当标准的东西。问题是,我想确保记录是最新的,因为其他使用该程序的人可能已经更改甚至删除了它。
我可以重新加载存储,但我只想检查一个特定的记录。。。所以我想我只需要去获取数据,建立另一个记录,并替换商店中现有的记录,但我真的想知道执行的最佳方法
请记住,RESTful代理对我来说不是一个选项,尽管我不知道在这种情况下更新操作是否有效(服务器->客户端)。
编辑:这可能有助于某人:我所做的只是将数据和原始对象从新记录复制到旧记录,然后"提交"更改。为我工作。
谢谢。
ExtJS 4.1
我也遇到了类似的问题,作为一个实验,我尝试了
sStore.load({
id: mskey,
addRecords: true
});
其中mskey是当前加载的记录的uuid。
I没有首先删除现有记录(作为实验),它更新了与服务器中的新数据具有相同id的现有记录(通过模型-->REST代理)。完美的
我知道你说过你没有使用REST代理,但这可能会帮助其他找到这篇文章的人搜索搜索词,比如你的主题名称(这就是我来到这里的原因!)
因此,看起来"addRecords"的意思是添加或更新。
FYI,Murray
Item.load(id, { success: function(r) { form.loadRecord(r); } });
保存后,您可能还应该对网格视图调用refresh,它将重新绘制保存事件中的更改。如果您关心性能,还可以对存储中的确切记录使用refreshNode(请参阅网格视图文档)。
当然,你不必使用restful代理,你可以使用任何代理,只要它能加载单个记录。
使用ExtJS 4.1,这里有一个覆盖:
CoffeeScript:
# Adds "reload" to models
Ext.define "Ext.ux.data.Model",
override: "Ext.data.Model",
# callBack is called with success:boolean
reload: (callBack) ->
Ext.getClass(@).load @getId(),
success : (r, o) =>
for k, v of r.data
@data[k] = v
@commit()
callBack(true) if Ext.isFunction(callBack)
failure: =>
callBack(false) if Ext.isFunction(callBack)
在JS中(未测试):
Ext.define("Ext.ux.data.Model", {
override: "Ext.data.Model",
reload: function(callBack) {
var me = this;
return Ext.getClass(this).load(this.getId(), {
success: function(r, o) {
var k;
for (k in r.data) {
me.data[k] = r.data[k];
}
me.commit();
if (Ext.isFunction(callBack)) {
callBack(true);
}
},
failure: function() {
if (Ext.isFunction(callBack)) {
callBack(false);
}
}
});
}
});
我在Ext.data.Model上创建了一个覆盖,以添加一个可用于更新现有记录(模型实例)数据的附加方法。
Ext.define('Ext.overrides.data.Model', {
override: 'Ext.data.Model',
/**
* Refresh the data of a record from the server
*/
reloadData: function(cb) {
var me = this;
var id = me.getId();
Ext.ModelManager.getModel(me.modelName).load(id, {
callback: function(record, operation, success) {
if (!success) {
Ext.Error.raise('Problem reloading data from server in record');
}
if (!record) {
Ext.Error.raise('No record from server to reload data from');
}
//change the data of the record without triggering anything
Ext.apply(me.data, record.getData());
//call a final callback if it was supplied
if (cb) {
cb.apply(me, arguments);
}
}
});
return me;
}
});
这就是你可以使用它的方法。它实际上很简单:
myRecord.reloadData(function(record, operation, success) {
//Done updating the data in myRecord
});
在内部,它使用关联模型上的load方法来创建新记录。该新记录基于与调用reloadData方法的原始记录相同的id。在回调中,新记录的数据将应用于原始记录的数据。没有触发任何事件,这可能是您想要的。
这是分机4.2.1。这个解决方案可能会出现几十种情况,但我们总是可以改进,不是吗。
更新:这个解决方案基本上实现了与@Drasill的解决方案相同的解决方案。哦,好吧。。。不过,这个已经过测试了。
- mysql查询一次在单个查询中的多个表中插入记录
- 可以't在Angular js/HTML中获取单个记录
- 使用jquery获取单个记录
- 如何使用挖空保存单个记录
- 使用express和node.js更新mongodb中的单个记录
- 是为大约100条记录中的每一条呈现一个表单更快,还是用ajax加载单个表单更快
- 使用 limit 解析“or”查询将返回忽略单个查询限制的所有记录
- 为单个定期事件保存单个 DHTMLX 计划程序事件记录
- 异步瀑布返回节点 js 和 mongodb 中数组的单个记录
- 使用单个查询将多个记录插入到 webSQL 表中,来自对象数组的数据
- 使用$http.get检索单个记录
- ExtJs JSONStore loaddata方法只加载单个记录
- 使用jquery ajax从xml中检索单个记录
- AngularJS - ng-repeat多次显示单个记录
- 绑定带有单个记录的简单视图模型
- 编辑单个记录
- 选择/取消选择全部对单个记录不起作用
- ExtJS 4-更新/刷新单个记录
- Angular JS:如何从 json 数据集“加载”单个记录
- 需要在ASP.net数据列表的单个记录中识别特定元素的ID