2013-03-02 15 views
6

Benim extjs uygulamasında bir combo var ve ' emin misiniz?' Kullanıcıya pencereyi onaylayın ve kullanıcı hayır dediğinde değiştirmeyi engelleyin.Kullanıcı Eklenti'de combobox değişim etkinliğinde nasıl onaylayabilirim?

JavaScript onay kutusu senkronize olduğundan, düzgün çalışıyor. Ancak, Ext JS kullanarak onay mesajı gösterilir ve kodun geri kalanı kullanıcı yanıt vermeden önce yürütülür.

// 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 
        } 
       } 
      }); 
     } 
    } 
} 

sorun Ext.Msg.show bir geri çağırma işlevi alır ve kullanıcı cevap bekliyor değildir ve biz combobox değişimi engellemek mümkün değil ise: İşte benim kodudur.

Ne yapmalıyım?

cevap

8

Açılan kutu değişikliği işlemini iptal etmek için beforeSelect dinleyicinin false değerini döndürmesi gerekiyor. Benim önerim ise:

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 Modal beforeSelect dinleyici kullanıcı eylemi öncesinde dönüyordu demektir yerel kutucuğa gibi komut yürütülmesini durdurmaz. Bu kodun çalışma şekli, select olayının hemen durdurulması ve gösterilen iletişim kutusudur. Kullanıcı "evet" i seçtiğinde, açılan menüdeki değer, geri arama fonksiyonunda programsal olarak ayarlanır.

+1

Bu işe yaramıyor, çünkü daha önce yeni seçilen değeri bilmiyoruz. –

+0

Lütfen düşünün ve sonra –

+4

cevabını seçin. Beforeselect'de seçilen değeri biliyorsunuz, ikinci argüman (yukarıdaki adamın cevabındaki kayıt). Değeri elde etmek için 'record.get ([combos değer alanı]) 'yi kullanabilirsiniz;' – Geronimo