使用jQuery移动版1.0rc3刷新listview

时间:2011-11-15 15:58:53

标签: javascript jquery listview mobile jquery-mobile

我正在使用 jquery.mobile-1.0rc3 版本开发平板电脑应用程序。以前,我在另一个应用程序上使用了 jquery.mobile-1.0a4.1 版本,并且可以通过执行 myListview.listview(“刷新”)来刷新列表视图

我在使用新的jquery.mobile-1.0rc3版本时遇到了一些问题。是否可以使用新的jquery.mobile-1.0rc3版本?

非常感谢。

以下是一些代码:

var lists = $( '#posicaoIntegradaActivosList, #posicaoIntegradaPassivosList, #posicaoIntegradaOutrosList' );

lists.empty();

/* Fill the lists with jquery template */

lists.listview( "refresh" );

错误:

  

未捕获的异常:无法在listview之前调用方法   初始化;试图调用方法'刷新'

1 个答案:

答案 0 :(得分:3)

根据代码运行的时间,它可能在jQuery Mobile初始化过程之前运行。默认情况下,jsFiddle在load事件触发后运行代码,因此DOM全部设置并且jQuery Mobile已完成初始化。如果你改变@Phill Pafford的jsFiddle(http://jsfiddle.net/qSmJq/3/)来运行“no wrap(body)”而不是“onLoad”,那么你得到的是你报告的错误。因此,我建议您删除lists.listview('refresh');行,或将代码放在document.readypageshow/pagecreate事件处理程序中:

var lists = $( '#posicaoIntegradaActivosList, #posicaoIntegradaPassivosList, #posicaoIntegradaOutrosList' );

lists.empty();

/* Fill the lists with jquery template */

//lists.listview( "refresh" );

以下是浏览器解析后立即运行代码的方法:http://jsfiddle.net/jasper/qSmJq/5/

或者:

$(function () {
    var lists = $( '#posicaoIntegradaActivosList, #posicaoIntegradaPassivosList, #posicaoIntegradaOutrosList' );

    lists.empty();

    /* Fill the lists with jquery template */

    lists.listview( "refresh" );
}

这是一个用于将代码包装在document.ready事件处理程序中的jsfiddle:http://jsfiddle.net/jasper/qSmJq/4/

或者:

$('#my-page-id').on('pagecreate', function () {
    var lists = $( '#posicaoIntegradaActivosList, #posicaoIntegradaPassivosList, #posicaoIntegradaOutrosList' );

    lists.empty();

    /* Fill the lists with jquery template */

    //lists.listview( "refresh" );
}

以下是使用pageshow事件的jsfiddle:http://jsfiddle.net/jasper/qSmJq/6/

以下是使用pagecreate事件的jsfiddle:http://jsfiddle.net/jasper/qSmJq/7/

旁注:如果您想检测jQuery Mobile是否已初始化某个元素,您可以检查该元素上的jQuery Mobile特定类:

$(function () {

    //cache lists
    var lists = $( '#posicaoIntegradaActivosList, #posicaoIntegradaPassivosList, #posicaoIntegradaOutrosList' );

    //iterate through the lists
    lists.each(function (index, value) {

        //cache this specific list
        var $value = $(value);

        /*add rows to this listview here*/

        //check if the listview has been initialized by jQuery Mobile by checking for the existence of the `ui-listview` class
        if ($value.hasClass('ui-listview')) {

            //since the class was found, refresh the already initialized element
            $value.listview('refresh');
        } else {

            //the class was not found, so initialize the widget
            $value.trigger('create');
        }
    });
});