我創建在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