2012-06-02 9 views
15

Mam problem z magazynem danych Sencha Touch i lokalnym proxy. Zasadniczo, gdy rekord zostanie usunięty ze sklepu, używając metody store.remove (record), sam rekord zostanie usunięty z pamięci, ale odwołanie do niego w magazynie nie zostanie usunięte, więc po odświeżeniu strony otrzymują piękny „Uncaught TypeError: nie można odczytać własności«isModel»undefined”Serwer proxy Sencha Touch nie usuwa indeksów po usuniętych rekordach.

Oto kod do sklepu:

Ext.define("App.store.Data", { 
    extend: "Ext.data.Store", 
    requires: "Ext.data.proxy.LocalStorage", 
    config: { 
     model: "App.model.Data", 
     autoSync: true, 
     proxy: { 
      type: 'localstorage', 
      id: 'app-store' 
     } 
    } 
}); 

Oto kod na przycisk Usuń na stronie edytora danych

onDeleteHomeworkCommand: function() { 

    var dataEditor = this.getDataEditor(); 
    var currentData = dataEditor.getRecord(); 
    var dataStore = Ext.getStore("Data"); 

    dataStore.remove(currentData); 
    dataStore.sync(); 

    this.activateDataList(); 
}, 

Edytuj:

Oto zrzut ekranu z magazynu danych, zanim metoda remove nazywa się: enter image description here

A oto jeden po: enter image description here

Uwaga Id nadal pozostaje w wykazie sklepu, co daje mi niezdefiniowany błąd, gdy strona jest odświeżana.

+0

Oto zrzut ekranu magazynu danych, zanim zostanie wywołana metoda usuwania: http://i.imgur.com/HmOtT.png A oto jeden po: http://i.imgur.com/ VEmeq.png Zauważ, że Id nadal znajduje się na liście sklepu, co daje mi niezdefiniowany błąd podczas odświeżania strony –

+0

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – Daniel

+0

czy możesz podać strukturę swojego modelu –

Odpowiedz

5

Problem polega na tym, że lokalny proxy proxy nie usuwa ID z wewnętrznej listy ID podczas usuwania rekordu. Możesz rozwiązać ten problem, jeśli jawnie zniszczysz rekord w proxy za pomocą destroy().

1

to rodzaj znanego problemu z prokurentem localstorage i stores w dotyku Sencha i zdarza się, ponieważ przez defualt Sencha bierze identyfikatory być int i stąd problem powstaje, gdy nie są. znalazłem rozwiązanie tego problemu na jednym z forów sencha i zadziałało dla mnie
to jest link do tego wątku http://www.sencha.com/forum/showthread.php?151741-remove-record-from-localstorage a rozwiązaniem jest edycja linii kodu w źródle sencha touch i tutaj to znaczy

A teraz rozwiązałem problem z tym, że identyfikatory nie zostały wyczyszczone.

Jest użycie getId która zwraca int ale lista identyfikatorów jest tablicą ciągów

//This line doesn't work circa 32196 
Ext.Array.remove(newIds, records[i].getId()); 

//Replace it with this one works fine. 
Ext.Array.remove(ids, records[i].getId().toString()); 

to może być, bo mój model korzysta z „id” typu „int”, ponieważ to, co Myślałem, że doc sugeruje, ale mogę się mylić .. Spójrz

Powiązane problemy