我创建在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
});
它在内部使用相关模型上的加载方法来创建新记录。该新记录基于与调用reloadData方法的原始记录相同的id。在回调中,新记录的数据应用于原始记录的数据。没有事件触发,这可能是你想要的帽子。
这是分机4.2.1。这个解决方案可能有几十个场景,但我们总是可以改进我们不能。
更新:该解决方案基本上实现了与@Drasill相同的功能。哦,好吧......这个虽然经过测试。
加载函数(在模型上)构建另一个记录(这就是为什么发布此问题:D)当我dblclick项目我已经获得记录,我只想重新加载它,而不是另建一个,或者如果所以,如何干净地更换旧的。谢谢西蒙。 – 2011-06-03 14:47:46
如果你想检查服务器的新鲜度,那么你将不得不加载一个新版本。如果您想单独使用网格的后台存储,而不是使用独立模型,则必须从商店中删除记录,然后使用只抓取网址的网址在网店上加载({add:true})相关记录。 – 2011-06-03 14:57:32
因此,没有办法重新加载它......好吧,谢谢,我会接受你的回答,因为它实际上帮助我解决了“刷新网格”问题。我担心它会弹出或什么时候我删除,然后添加(或反之亦然)有问题的记录。谢谢。 – 2011-06-03 15:40:03