【问题标题】:Refresh listview with jQuery mobile version 1.0rc3使用 jQuery mobile 版本 1.0rc3 刷新 listview
【发布时间】:2011-11-15 15:58:53
【问题描述】:

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

我在使用新的 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 之前的方法 初始化;试图调用方法“刷新”

【问题讨论】:

  • 您的示例代码按照我在这里的测试工作:jsfiddle.net/qSmJq/1jsfiddle.net/qSmJq/3 并获得预期结果而不会出错。你运行的是什么版本的jQuery? RC3 需要 1.6.4
  • 能否提供HTML代码?如果你做 list.listview();在lists.listview(“刷新”)之前;
  • Phill,您的示例逻辑与我的代码相同,并且按预期工作。我真的不明白这里出了什么问题,我正在使用 jQuery 1.6.4。
  • 我也试过lists.listview();但它给了我另一个错误!这不是必需的,因为列表视图已经在 HTML 中初始化。
  • 您能否在jsfiddle.net 上提供一个带有您的代码的工作演示?或者给我们一个URL来测试?这将有助于调试。从 A4.1 到 RC3 发生了很多变化,被重构、重命名等......

标签: javascript jquery listview mobile jquery-mobile


【解决方案1】:

根据您的代码运行时间,它可能在 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" );

这是一个用于在浏览器解析代码后立即运行代码的 jsfiddle:http://jsfiddle.net/jasper/qSmJq/5/

或者:

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

    lists.empty();

    /* Fill the lists with jquery template */

    lists.listview( "refresh" );
}

这是一个 jsfiddle,用于将您的代码包装在 document.ready 事件处理程序中: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');
        }
    });
});

【讨论】:

  • Jasper,我遵循了你的逻辑并且成功了。问题是,在我尝试刷新到 listview 时,甚至没有创建小部件,所以代码最终像: $( lists ).each( function() { ( $( this ).hasClass( 'ui-listview' ) ) ? $( this ).listview( 'refresh' ) : $( this ).trigger( 'create' ); });非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-07-19
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多