मैं ExtJS 4 का उपयोग कर रहा है और एक ajax प्रॉक्सी और एपीआई के साथ एक Ext.data.Store है:store.remove रद्द ExtJS 4 में सर्वर कॉल के बाद
var gridStore = Ext.create('Ext.data.Store', {
autoSync: true,
proxy: {
type: 'ajax',
api: {
read: 'myurl',
create: 'myurl',
update: 'myurl',
destroy: 'myurl'
},
reader: {
type: 'json',
successProperty: 'success',
root: 'data',
messageProperty: 'message'
},
writer: {
type: 'json',
writeAllFields: false,
root: 'data'
},
listeners: {
exception: function(proxy, response, operation){
Ext.MessageBox.show({
title: 'Server error',
msg: operation.getError(),
icon: Ext.MessageBox.ERROR,
buttons: Ext.Msg.OK
});
}
}
...
जब मैं अद्यतन समारोह और अपने सर्वर का उपयोग success:false
के साथ एक जेसन ऑब्जेक्ट देता है (क्योंकि उसने कुछ गलत दर्ज किया है) मेरे संबंधित ग्रिड में फ़ील्ड अभी भी बदल गया है और उपयोगकर्ता के पास अपना गलत मान बदलने का विकल्प है।
यह ठीक काम करता है।
लेकिन जब मैं दुकान से एक रिकॉर्ड को दूर ...
var store = Ext.StoreManager.lookup('gridStore');
store.remove(store.getById(id));
... तो ExtJS की दुकान से इस रिकॉर्ड के पहले दूर करता है और AJAX API बाद में कहते हैं। तो जब नष्ट एपीआई success:false
देता है तो संदेश अपडेट एपीआई जैसे अपवाद के रूप में दिखाया जाता है, ठीक है, लेकिन मेरा रिकॉर्ड स्टोर से हटा दिया गया है! उदाहरण के लिए सर्वर से अपवाद कहता है कि आप इस रिकॉर्ड को हटा नहीं सकते क्योंकि यह स्टोर में पहले से ही हटा दिया गया है।
सर्वर सिंक के बाद स्टोर हटाने को कैसे रद्द करें? यदि सर्वर success:false
देता है तो मैं स्टोर में रहने के लिए रिकॉर्ड चाहता हूं।
कोई विचार? शायद एक बग?
अद्यतन समाधान
रयान के anwer आधार पर, मैं निम्नलिखित के रूप में अपवाद श्रोता है, जो बहुत अच्छी तरह से काम करता है संशोधित:
listeners: {
exception: function(proxy, response, operation){
Ext.MessageBox.show(...);
// get the removed records and insert them where they have been
var removedRecords = gridStore.getRemovedRecords();
for(var i=0; i<removedRecords.length; i++){
var record = removedRecords[i];
gridStore.insert(record.index, record);
}
}
}
शायद एक बग, या क्या होता है यह देखने के लिए स्रोत कोड में खोदने की आवश्यकता है। हम्म। दिलचस्प सवाल इससे पहले देखा, लेकिन मैं दुकान को फिर से लोड करके इसे दूर कर लिया। अक्षम लेकिन यह छोटे डेटा के लिए ठीक है। –
अच्छा एक :) लेकिन आप 'gridStore.removed = []' और अन्यथा जोड़ना भूल गए हैं यदि आप उस आइटम को दोबारा हटा दें तो आपके पास डुप्लिकेट होगा (फिर यह अभी भी हटाए गए सरणी में है) – VDP