2013-03-02 3 views
6

मेरे पास मेरे extjs एप्लिकेशन में एक कॉम्बो है और मैं दिखाना चाहता हूं कि 'क्या आप सुनिश्चित हैं?' उपयोगकर्ता को विंडो की पुष्टि करें और अगर उपयोगकर्ता ने कहा तो बदलना बंद करें।मैं ExtJs में combobox परिवर्तन ईवेंट पर उपयोगकर्ता की पुष्टि कैसे प्राप्त कर सकता हूं?

चूंकि जावास्क्रिप्ट की पुष्टि बॉक्स तुल्यकालिक है, यह ठीक से काम करता है। लेकिन Ext JS का उपयोग करके, पुष्टिकरण संदेश दिखाया गया है, और मेरा शेष कोड उपयोगकर्ता प्रतिक्रिया देने से पहले निष्पादित किया जाएगा।

// JavaScript confirm box 
{ 
    xtype: 'combo', 
    ... 
    ... 
    ... 
    listeners: { 
     beforeselect: function(combo, record, index) { 
      if(confirm('Are you sure ?') == false) 
      { 
       return false; // prevent combo from changing 
      } 
      // else continue 
     } 
    } 
} 
// Ext JS message box (to confirm) 
{ 
    xtype: 'combo', 
    ... 
    ... 
    ... 
    listeners: { 
     beforeselect: function(combo, record, index) { 
      Ext.Msg.show({ 
       title: 'Warning', 
       msg: 'Are You Sure ?', 
       buttons: Ext.Msg.YESNO, 
       fn: function(btn) { 
        if (btn == 'yes') { 
         // continue and set new value on combo 
        } 
        else if (btn == 'no') { 
         // prevent combo from changing 
        } 
       } 
      }); 
     } 
    } 
} 

समस्या Ext.Msg.show कॉलबैक फ़ंक्शन हो जाता है और उपयोगकर्ता जवाब के लिए इंतजार नहीं कर रहा है और हम बता गया बदलते को रोकने में सक्षम नहीं हो रहा है: यहाँ मेरी कोड है।

मुझे क्या करना चाहिए?

उत्तर

8

combobox परिवर्तन को रद्द करने के लिए, beforeSelect श्रोता को झूठी वापसी की आवश्यकता है। मेरे सुझाव है:

beforeselect: function(combo, record, index) { 
    Ext.Msg.show({ 
    title: 'Warning', 
    msg: 'Are You Sure ?', 
    buttons: Ext.Msg.YESNO, 
    fn: function(btn) { 
     if (btn == 'yes') { 

     // Here we have to manually set the combo value 
     // since the original select event was cancelled 
     combo.setValue(/* whatever value was selected */); 
     } 

     else if (btn == 'no') { 

     // Don't do anything because the select event was already cancelled 
     } 
    } 
    }); 

    // Cancel the default action 
    return false; 
} 

ExtJS मॉडल देशी संवाद, जिसका अर्थ है कि beforeSelect श्रोता उपयोगकर्ता कार्रवाई करने से पहले लौट रहा था जैसे स्क्रिप्ट के निष्पादन को रोकने नहीं करता है। जिस तरह से यह कोड काम करता है वह यह है कि चयन ईवेंट तुरंत बंद हो जाता है, और संवाद दिखाया जाता है। जब उपयोगकर्ता "हां" चुनता है, तो कॉम्बो पर मान प्रोग्रामबैक कॉलबैक फ़ंक्शन में सेट होता है।

+1

जो काम नहीं कर रहा है, क्योंकि beforeselect में हम अभी तक नए चयनित मूल्य को नहीं जानते हैं! –

+0

कृपया सोचें और फिर –

+4

का उत्तर दें आप 'beforeselect' में चयनित मान जानते हैं, यह दूसरा तर्क है (उपरोक्त व्यक्ति के उत्तर में रिकॉर्ड)। मान प्राप्त करने के लिए आप 'record.get ([combos value field]) का उपयोग कर सकते हैं;' – Geronimo

संबंधित मुद्दे