2010-09-14 27 views
9

सहेजने के बाद डेटाबेस आईडी के साथ एक स्टोर को अपडेट करना मैं व्यवस्थापक एप में किसी तालिका पर कुछ सरल सीआरयूडी संचालन के लिए EXTJS ग्रिड का उपयोग करने का तरीका सीखने की कोशिश कर रहा हूं।EXTJS + ग्रिड

 var userDataStore = new Ext.data.Store({ 
      id: 'userDataStore', 
      autoSave: false, 
      batch: true, 
      proxy: new Ext.data.HttpProxy({ 
       api: { 
        read: '/Admin/Users/All', 
        create: '/Admin/Users/Save', 
        update: '/Admin/Users/Save' 
       } 
      }), 
      reader: new Ext.data.JsonReader(
      { 
       root: 'Data',      
       idProperty: 'ID', 
       totalProperty: 'total', 
       successProperty: 'success', 
       messageProperty: 'message' 
      }, [ 
       { name: 'ID', type: 'string', allowBlanks: false }, 
       { name: 'NT_ID', type: 'string', allowBlank: false }, 
       { name: 'EMail', type: 'string', allowBlank: false }, 
       { name: 'Name', type: 'string', allowBlank: false }, 
       { name: 'Enabled', type: 'bool', allowBlank: false }, 
       { name: 'CurrentRoleCode', type: 'string', allowBlank: false}] 
      ), 
      writer: new Ext.data.JsonWriter(
      { 
       encode: false, 
       writeAllFields: true, 
       listful: true 
      }) 
     }); 

यह एक ग्रिड के लिए बाध्य है, और मैं लोड और इस मुद्दे के बिना उपयोगकर्ताओं को बचाने के लिए कर रहा हूँ:

मैं एक सरल ग्रिड किसी उपयोगकर्ताओं को संपादित करने की अनुमति देता है कि है, दुकान के रूप में परिभाषित किया गया है। सहेजें बटन ऐसा दिखाई देगा:

var saveButton = new Ext.Button({ 
      text: 'Save', 
      disabled: true, 
      handler: function() { 
       userDataStore.save();      
       pageState.ClearDirty(); 
       saveButton.disable(); 
      } 
     }); 

हालांकि, एक नया उपयोगकर्ता बनाते समय, उपयोगकर्ता के लिए JSON पोस्ट, "अपडेट" के रूप में ही बाकी सेवा समाप्ति बिंदु को पोस्ट किया जाता है किया जा रहा है कि कोई भी आईडी फर्क सिर्फ इतना है साथ मान पोस्ट किया गया है (क्योंकि सर्वर से लोड करते समय केवल स्टोर में सेट किया जाता है)।

यह काम करता है, और मैं उपयोगकर्ताओं को बनाने में सक्षम हूं।

सहेजने वाली आरईएसटी सेवा नई डेटाबेस आईडी के साथ बनाई गई पंक्ति को वापस छोड़ देती है, और मुझे लगता है कि EXTJS पंक्ति में नई जेनरेट की गई डेटाबेस आईडी को स्वचालित रूप से बांध देगा। यह उपयोगकर्ता को उस पंक्ति को और संपादित करने की अनुमति देता है, और एक डालने के बजाय अद्यतन का कारण बनता है।

इसके बजाए, पंक्ति में एक खाली उपयोगकर्ता आईडी है, इसलिए एक अतिरिक्त सहेज एक और नया उपयोगकर्ता बनाता है।

तो या तो:

  • ExtJS उत्पन्न पंक्ति आईडी स्वचालित रूप से हल करने के लिए माना जाता है और मैं बस कुछ गलत कर रहा हूँ।
  • मुझे अतिरिक्त आरईएसटी कॉल के साथ प्रत्येक सहेजने के बाद मैन्युअल रूप से ग्रिड को पुनः लोड करना होगा।

मैं EXTJS दस्तावेज़ और मंच देख रहा हूं, लेकिन मैं उचित दृष्टिकोण पर अस्पष्ट हूं।

क्या कोई स्पष्टीकरण दे सकता है?

संपादित करें: मैंने सफलताप्रणाली से मेल खाने के लिए JSON में सफलता = सही लौटने की कोशिश की, हालांकि यह अभी भी काम नहीं कर रहा है।

संपादित करें # 2: अब तक केवल एकमात्र चीज जो मैंने पाया है वह काम करने के बाद "userDataStore.reload()" कर रहा है, हालांकि मैं सहेजने के बाद स्टोर की सामग्री वापस कर रहा था, मैं उम्मीद कर रहा था कि EXTJS समझ जाएगा कि पंक्ति मानों को अद्यतन और अद्यतन करें।

उत्तर

-1

आपको savebtn हैंडलर जैसे store.reload() में नए पैरा के साथ पुनः लोड स्टोर की आवश्यकता है;

बेशक आप कार्रवाई लोड करने के लिए अधिक पैरामीटर जोड़ सकते हैं की

2
 
    I've got an idea that may help you. Let't suppose that user added a new 
record in grid, in that moment add a new property newRecOrderNo to the record to 
identify the record after response. When user will post data to server after 
inserting you must get a new ID and associate it to newRecOrderNo 
(like Map<Integer,Integer>). Then return json object like that : 

{ 
    success : true, 
    newIdes : { 
      1 : 23, 
      2 : 34 
    } 
} 
 

Then when you get response do set proper IDs to records: 

    userDataStore.each(function(rec){ 
     if(rec.data.newRecOrderNo){ 
      rec.data.ID = response.newIdes[rec.data.newRecOrderNo]; 
      delete rec.data.newRedOrderNo; 
     } 
    }) 
 
}) 

1

हाँ, यह आईडी (और यह भी अन्य क्षेत्रों, यदि सर्वर रिटर्न संशोधित उनमें से मान), सेट करता है, तो बनाने ajax बैकएंड साथ रिकॉर्ड रिटर्न आईडी सेट करें, कम से कम 4.1 में। आपको जेएसएस डिक्शनरी के रूप में 'रूट' कुंजी के तहत आईडी सेट के साथ डाला गया रिकॉर्ड वापस करना चाहिए, इस उदाहरण में रूट 'डेटा' है, यानी

{ 
    "Data": { 
    "ID": 8932, 
    "NT_ID": 28738273, 
    ... 
    "CurrentRoleCode": "aaa", 
    }, 
    "success": true 
} 
संबंधित मुद्दे