2012-02-29 6 views
13

Ho codificato la mia strada in un angolo.Elenco di elenchi mobili di Jquery - controllare che l'inizializzazione sia completa

Devo chiamare listview("refresh") in un elenco, tuttavia potrebbe non essere stato inizializzato nel punto in cui sto chiamando il metodo di aggiornamento.

C'è un modo per verificare se il componente è stato inizializzato o no?

Questo è l'errore che ottengo:

non può chiamare i metodi su ListView prima inizializzazione

+0

qualche esempio di codice sarebbe bello, http: // jsfiddle.net –

+0

Questo è il problema dello sviluppo modulare Phill, È molto difficile produrre lo stesso scenario in jsfiddle. Sto chiamando un metodo su un modulo caricato senza sapere se un listview è stato inizializzato o meno. Ciò dipenderebbe dalla velocità della connessione dell'utente. L'ho risolto per il momento utilizzando una bandiera. Ho solo pensato che potrebbe esserci un modo per chiamare il componente listview e controllarne lo stato. – Chin

risposta

21

Quando un widget listview viene inizializzato, è dato il ui-listview classe, quindi possiamo provare questa classe per vedere se è stata inizializzata:

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

Questo dovrebbe contribuire ad alleviare l'errore che si sta ottenendo.

Inoltre, la funzione restituisce .hasClass('[class]')true/false se l'elemento ha il [class]: http://api.jquery.com/hasClass

+0

Bingo. Buona risposta - grazie, spero solo che non cambino il nome della classe. :) – Chin

3

Prova

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

Perché è stato downvoted? Il metodo funziona bene. – Brad

0

Per me la soluzione a questo messaggio è stato quello di aggiungere data-role="listview" al mio elemento ul. Potrei quindi utilizzare il metodo .listview('refresh') nei gestori di eventi.

-1

si può semplicemente creare una variabile globale

var is_mobile_init = false;

nella parte superiore degli script. quindi impostalo su true dopo aver incluso jquery mobile.

di prima scrittura rinfrescante,

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

in questo modo, non c'è bisogno di tenere traccia di tutte le varie classi ed è intuitivo

Problemi correlati