2011-09-20 9 views
7

Mam combobox w oknie-> formularz-> combo, iam wiążące dane z siatki do combo przy użyciu form.loadRecord (rekord).Extbie 4 Combo box nie ładuje się po raz pierwszy (po zestawieniu combo z danymi formularza)

Mój problem jest:

Po związaniu dane, jestem wywołać combo zmienić dane combo, po raz pierwszy combo poszerzyć trochę i ukryć się automatycznie po drugim kliknięciu pozycji combo tylko ładunki prawidłowo.

{ 
    xtype: 'combobox', 
    editable: false, 
    id: 'USERTYPECmbo', 
    queryMode: 'remote', 
    displayField: 'USERTYPE', 
    store: Ext.create('Ext.data.Store', { 
     autoLoad: true, 
     fields: ['USERTYPE'], 
     proxy: { 
      type: 'ajax', 
      extraParams: { 
       typeName: 'USERTYPE' 
      }, 
      url: 'USERTYPE.htm', 
      reader: { 
       type: 'json', 
       root: 'res' 
      } 
     }, 
     listeners: { 
      load: function (store, options) { 
       var combo = Ext.getCmp('USERTYPECmbo'); 
       combo.setValue(combo.getValue()); //Set the remote combo after the store loads. 
      } 
     } 
    }), 
    name: 'USERTYPE', 
    fieldLabel: 'USER TYPE' 
} 

punkt mi gdzie iam dzieje źle lub jakakolwiek nieruchomość należy dodać do składnika.

Odpowiedz

4

To dlatego, że valueField nie jest zdefiniowany w twoim obiekcie konfiguracyjnym (podczas gdy pole displayField jest ustawione). Kiedy extjs spróbuje załadować twoje combo, potrzebuje zarówno wartości, jak i pól wyświetlania, aby poprawnie wyświetlać twoje combo, ale w czasie renderowania twoja valueField nie jest jeszcze ustawiona i czeka na żądanie ajax wysłane do serwera i odpowiedź jest odesłana.

W swoim słuchaczu ustawiasz wartość combo, gdy nie jest ona jeszcze renderowana. Tak więc po ponownym kliknięciu na kombinację, dokładnie po wczytaniu zdalnego JSON, ustawiane są pola combo.

{ 
    xtype : 'combobox', 
    editable : false, 
    id:'USERTYPECmbo', 
    queryMode: 'remote', 
    displayField: 'USERTYPE', 
    valueField: 'USERTYPE',//set whatever field you like in your json       
    store :new Ext.data.Store({ 
     autoLoad: true, 
     fields: [ 'USERTYPE' ], 
     proxy: { 
      type: 'ajax', 
      extraParams: {typeName : 'USERTYPE'}, 
      url : 'USERTYPE.htm', 
      reader: { 
       type: 'json', 
       root : 'res' 
      } 
     }      
    }), 
    name : 'USERTYPE', 
    fieldLabel: 'USER TYPE' 
} 

Aktualizacja: Jedna kwestia nie zauważyłem było to, że stworzył sklep korzystając Ext.create i dlatego, ExtJS próbowałby zdobycia JSON dwukrotnie (po prostu sprawdzić go przy użyciu programu Firebug), podczas gdy wystarczy jedno żądanie.Nie używaj nowego zamiast Ext.create.I przetestowałem twój kod na moim lokalnym serwerze i działa on poprawnie. Jeśli nadal masz ten sam problem, podaj link do pobrania do formularza js + html + Store, więc może przejrzeć kod ur. Możesz pobrać moje pliki testowe zbudowane na swoim kodzie i działające pod numerem here. testowane na FF 6 i opera 10 i IE9

+0

hi drfanai, dzięki za odpowiedz, dodałem valueField a także dodany zadanie opóźnienia jak .. zadanie var = new Ext.util.DelayedTask (function() {view.down ("formularz"). loadRecord (record);}); task.delay (20000); Aby zakończyć renderowanie formularza i załadować go do sklepu, nawet jeśli otrzymam ten sam problem, – vineth

+0

@ drfanai Jeśli to możliwe, podaj przykładowy formularz próbkowania łączącej próbki (zdalne) lub wszelkie powiązane łącza.Kiedy nie wiem jak zweryfikować WSZYSTKIE combo sklep jest ładowany wewnątrz formularza – vineth

+0

Zaktualizowany my answer.hope it helps.check ten adres URL dla dobrego samouczka na zdalnych sklepach http://www.quizzpot.com/2009/10/combo-box-loaded-dynamically-and- zdalnie/ –

6

Spróbuj dodać

queryMode: 'local' 

do swoich właściwości combobox

+0

najlepsze rozwiązanie !!! – Stevanicus

Powiązane problemy