2012-02-29 9 views
13

Zakodowałem sobie drogę do kąta.Przeglądarka mobilna Jquery - sprawdź, czy inicjalizacja jest kompletna

Muszę zadzwonić pod numer listview("refresh") na liście, ale może nie zostać zainicjalizowany w punkcie, w którym nazywam metodę odświeżania.

Czy istnieje sposób sprawdzenia, czy komponent się zainicjował, czy nie?

Jest to błąd otrzymuję:

nie można wywołać metody na ListView Przed inicjalizacją

+0

Niektóre przykładowy kod byłoby miło, http: // jsfiddle.net –

+0

To jest problem z rozwojem modułowym Phill, Bardzo trudno jest stworzyć taki sam scenariusz w jsfiddle. Wywołuję metodę na załadowanym module, nie wiedząc, czy zainicjowano listview, czy nie. Byłoby to zależne od szybkości połączenia użytkownika. Rozwiązałem go na razie za pomocą flagi. Pomyślałem, że może istnieć sposób na wywołanie składnika listview i sprawdzenie jego statusu. – Chin

Odpowiedz

21

Kiedy listview widget jest inicjowany, to biorąc pod uwagę ui-listview klasa, dzięki czemu możemy przetestować dla tej klasy, czy została zainicjowana:

//select the listview 
var $myUL = $('#my-ul-element'); 

//add a list-item to the listview 
$myUL.append('<li>I\'m New!</li>'); 

//check if the listview has the ui-listview class 
if ($myUL.hasClass('ui-listview')) { 

    //this listview has already been initialized, so refresh it 
    $myUL.listview('refresh'); 
} else { 

    //this listview has not yet been initialized, so it gets initialized 
    $myUL.listview();//or you can use .trigger('create'); 
} 

To powinno pomóc złagodzić otrzymywany błąd.

Również funkcja .hasClass('[class]') zwraca true/false jeśli element ma [class]: http://api.jquery.com/hasClass

+0

Bingo. Dobra odpowiedź - dzięki, tylko mam nadzieję, że nie zmieniają nazwy klasy. :) – Chin

3

Spróbuj

$list.listview(); 
$list.listview('refresh'); 
+0

Dlaczego zostało to odrzucone? Ta metoda działa dobrze. – Brad

0

Dla mnie rozwiązanie tego komunikatu było dodanie data-role="listview" do mojego ul elementu. Mogłem następnie użyć metody .listview('refresh') w moich procedurach obsługi zdarzeń.

-1

można po prostu utworzyć zmienną globalną

var is_mobile_init = false;

u góry skryptów. następnie ustaw ją na true po dołączeniu jquery mobile.

następnie przed odświeżającej zapisu,

if (is_mobile_init) 
    $myUL.listview('refresh'); 

w ten sposób, nie trzeba śledzić wszystkich różnych klas i jest intuicyjny

Powiązane problemy