2013-01-17 5 views
5

ten kod działa bloku:ExtJS 4.1.1a: JsonStore + proxy + url = "Nie można wywołać metoda 'indexOf' undefined"

Ext.define('MyApp.store.MyJsonStore', { 
    extend: 'Ext.data.Store', 
    fields: ['fieldName'], 
    proxy: { 
     type: 'ajax', 
     url: 'json.php', 
     reader: 'json' 
    } 
}); 

tej jednej awarii:

Ext.define('MyApp.store.MyJsonStore', { 
    extend: 'Ext.data.JsonStore', 
    fields: ['fieldName'], 
    proxy: { 
     type: 'ajax', 
     url: 'json.php', 
     reader: 'json' 
    } 
}); 

Oto miejsce, w którym występuje problem:

enter image description here

robię coś źle?

Odpowiedz

4

JsonStore jest nieco czerwonej strefy w bibliotece ExtJS ...

Jeśli spojrzeć na źródła JsonStore, zobaczysz:

constructor: function(config) { 
    config = Ext.apply({ 
     proxy: { 
      type : 'ajax', 
      reader: 'json', 
      writer: 'json' 
     } 
    }, config); 
    this.callParent([config]); 
} 

Praktycznie sklep przesłania własnego config .

Szczerze mówiąc, nie mogę myśleć, dlaczego wolisz JsonStore przez Ext.data.Store. Json jest bardziej czytelny z punktu widzenia projektu - sklep po prostu przechowuje rekordy.

Używam tylko Ext.data.Store i Ext.data.TreeStore w moich aplikacjach.

+0

ja niedawno przełączane z 4.1.0 do 4.1.1, aby uzyskać kompilator i możliwości MVC. W wersji zapobiegawczej ten kod był prawidłowy. Dziękuję za wyjaśnienia, teraz jestem w porządku. – leaf

+0

JSON Store jest do dupy! Zmarnowałem jeden pełny dzień dla tego bez sensu. Kiedyś dobrze działać we wcześniejszych wersjach – hop

1

miałem podobny problem w Ext JS 4.2.1 ze sklepu jsonp, spowodowanego przez nie ustawienie URL w początkowym magazynu config. I było stworzenie URL dynamicznie przepuszczenie go w trakcie obciążenia:

myStore.load({ url: 'json.php' }); 

który spowodował go pomyślnie załadować przeszedł URL ale ja też mam dokładnie ten sam błąd i ślad stosu, który masz, a dane nigdy faktycznie wyświetlane (mogłem to zobaczyć tylko za pomocą Narzędzi dla programistów Chrome). I rozwiązać problem za pomocą następującego kodu:

myStore.proxy.url = 'json.php'; 
myStore.load(); 

wiem, że nie robią dokładnie to samo, ale błędy dostaliśmy są identyczne, więc mam nadzieję, że to może przynajmniej punkt, który we właściwym kierunku.

UPDATE

Jak się okazuje, problem rzeczywiście wynikała z ComboBox, który był auto-loading jej wartości. Byłoby spróbuj ponownie załadować wartości po kliknięciu na nim, i mimo, że udało się załadować je po raz pierwszy, przekazując adres URL w obciążeniu ({}) nazywamy to wykorzystywał swoją własną metodę ładowania, który korzystał z serwera proxy URL (który był niezdefiniowany). Dlatego ustawienie adresu URL proxy zatrzymało błąd.

Prawdziwym rozwiązaniem dla mnie było uniemożliwienie automatycznego wczytywania składnika ComboBox, ustawiając konfigurację queryMode na local.

+0

Przykro mi, ale nie pamiętam kontekstu, wiele czasu spędził ponieważ ten problem wystąpił. W każdym razie, dziękuję za twój wkład, to z pewnością może pomóc komuś. – leaf

Powiązane problemy