2012-02-29 10 views
13

He codificado mi camino en una esquina.Lista de servidores móviles de Jquery: compruebe que la inicialización se completó

Necesito llamar al listview("refresh") en una lista, sin embargo, es posible que no se haya inicializado en el momento en que llamo al método de actualización.

¿Hay alguna manera de verificar si el componente se ha inicializado o no?

Este es el error que consigo:

no puede llamar a métodos en vista de lista antes de la inicialización

+0

un código de ejemplo sería bueno, http: // jsfiddle.net –

+0

Ese es el problema con el desarrollo modular Phill, es muy difícil producir el mismo escenario en jsfiddle. Estoy llamando a un método en un módulo cargado sin saber si una lista de lista se ha inicializado o no. Esto dependería de la velocidad de la conexión del usuario. Lo he solucionado por el momento usando una bandera. Solo pensé que podría haber una forma de llamar al componente listview y verificar su estado. – Chin

Respuesta

21

Cuando se inicializa un widget listview, se ha dado la ui-listview clase, por lo que podemos probar esta clase para ver si se ha inicializado:

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

Esto debería ayudar a aliviar el error que está recibiendo.

Además, la función devuelve .hasClass('[class]')true/false si el elemento tiene el [class]: http://api.jquery.com/hasClass

+0

Bingo. Buena respuesta, gracias, solo espero que no cambien el nombre de la clase. :) – Chin

3

Trate

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

¿Por qué se bajó este voto? El método funciona bien. – Brad

0

Para mí la solución a este mensaje fue añadir data-role="listview" a mi elemento ul. Podría usar el método .listview('refresh') en mis controladores de eventos.

-1

puede simplemente crear una variable global

var is_mobile_init = false;

en la parte superior de sus scripts. luego configúralo como verdadero después de incluir jquery mobile.

entonces antes de escribir refrescante,

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

esta manera, no es necesario hacer un seguimiento de todas las diversas clases y es intuitiva

Cuestiones relacionadas