我在 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 相同的解决方案。哦,好吧......不过,这个已经过测试了。