Я создал переопределение для 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. При обратном вызове данные новой записи применяются к данным исходной записи. События не сработали, что, вероятно, вам и нужно.
Это Ext 4.2.1. Вероятно, существуют десятки сценариев, что это решение ломается, но мы всегда можем уточнить, не так ли.
Обновление: это решение в основном реализует то же, что и @Drasill. Ну да ладно ... Этот был проверен, хотя.