【问题标题】:jQuery Mobile refresh listview after database query数据库查询后jQuery Mobile刷新列表视图
【发布时间】:2013-10-30 19:27:21
【问题描述】:

我有一个带有 listview 统计信息的 jQuery Mobile 网站。用户可以点击传递弹出窗口的“动作”按钮。根据他们在弹出窗口中的回答,列表视图中的数字/统计数据可能会发生变化。数据库查询成功,但页面没有自动更新;我必须手动刷新它才能看到变化。我正在使用 .post() 来查询数据库(代码在最后)。

我已经看到这个问题在这里被问了多次,通常使用相同的解决方案。在成功回调或弹出“afterclose”中,使用:

$('#somelist').listview('refresh');

或者

$("#page").tigger("create");

不幸的是,这些解决方案似乎都不适合我。这对我来说已经成为一个非常令人沮丧的问题,所以我希望有人能提供帮助!

这是我的代码的缩写版本:

<div id="testdiv">
    <ul data-role="listview" data-inset="true" data-theme="a" data-count-theme="a">
        <li data-role="list-divider">Combat Round: <?php echo $round; ?><span class="combat_result"></span></li>

    <?php   
        for ($i = 0; $i < $numrows; $i++) {
    ?>
        <li class="combatant" id="combatant_<?php echo $i; ?>"><h3 class="ui-li-heading"><span class="player_name"><?php echo $member[$i]['player_name']; ?></span></h3><span class='ui-li-count'><?php echo $member[$i]['player_total_init']; ?></span>
            <p class="ul-li-desc"><strong>Actions Remaining: </strong><span class="remaining"><?php echo $member[$i]['player_actions_remain']; ?></span></p>
        </li>
    <?php
        }
    ?>
    </ul>
</div> <!-- testdiv -->

我通过 JS 查询数据库:

    $(document).on('click', '#commit_save', function(e) {
        e.preventDefault();

        var combatid=$("#save_data_holder").data("combat_id");
        var combat_desc=$("#combat_desc").val();

        $.post("commit_save.php", {
            combatid: combatid,
            combat_desc: combat_desc
        }, function(data) {
                $(".save_result").html(data);
                    $('#combat_list').listview("refresh");
                        $("#home").trigger("create");
        });

    }); 

还有我的弹窗JS:

            $("#enter_num_actions").popup({
            beforeposition: function( event, ui ) {
                $("#data_holder").data({"combatant_name": combatant_name, "combat_id": combat_id});
            },
            afterclose: function( event, ui ) {
                    $("#testdiv").listview().trigger("create");
            }
        }); 

再次,一切正常,除了我必须执行手动刷新以获取要更新的列表视图中的值。如果有人有建议,我很感激。

提前致谢!

【问题讨论】:

  • 删除 .trigger() 你在这里不需要它。成功追加项目后应调用.listview('refresh'),否则会报错。
  • 奥马尔:感谢您的回复。我试过多次调用 .listview("refresh") ,但它似乎没有做任何事情。
  • 根据您的代码,ul - listview - 没有 id?
  • 没错。我最初有一个 ul 的 id,但 W3C 验证器不喜欢它。我所做的是将无序列表包装在一个名为“testdiv”的 div 中。
  • 另外,为了澄清,我没有将数据附加到列表视图。相反,我正在更改/更新列表视图中的现有内容。

标签: javascript jquery listview jquery-mobile


【解决方案1】:

假设从您的缩写 php 代码中,您的帖子响应包含一个完整的无序列表,包括 &lt;ul&gt;&lt;/ul&gt; 标签(顺便说一句,您的缩写代码不包含 &lt;/ul&gt;,也许您在缩写时截断了它)而不仅仅是列表标签 @ 987654324@你需要在收到的listview的父div上触发create事件。

$("#parentDIV").listview().trigger("create");

此代码为子 html 无序列表创建一个新的列表视图,该列表在该父 div 中包含属性 data-role="listview"。

我相信$('#somelist').listview('refresh'); 仅用于将&lt;li&gt;&lt;/li&gt; 标记注入已经存在的&lt;ul&gt;,然后使用新的&lt;li&gt; 内容刷新该预先存在的列表。

当我在应用程序中遇到类似问题并且它们无法正常工作时,我发现使用刷新等的类似结果,因为 jquery mobile 尚未将新的 html 无序列表视为列表视图,因此它无法刷新“列表视图”。请注意对 listview 的引用,而不是包含属性 data-role="listview" 的 html 无序列表,jquery mobile 似乎在您“创建”它之前不会将无序列表视为列表视图。

使用包含 data-role="listview" 的列表手动刷新页面将其标记为列表视图,就像在页面加载时处理任何其他 jquery 移动属性一样,这就是刷新它时它起作用的原因。

【讨论】:

  • 感谢您的回复!你对结束是完全正确的。实际上,我在提交帖子后发现了这一点,但不幸的是,这并没有解决问题。我添加了一个 div (#testdiv) 来包裹无序列表,并根据您的建议创建触发器。我认为这是朝着正确方向迈出的一步,因为“某事”现在发生了——它闪烁并似乎重新绘制了列表视图……但在我手动刷新之前它仍然没有从数据库中获取更新的值。我已经更新了上面的代码,如果您有时间再看一下。谢谢!
  • 根据您对闪烁方式的描述,但信息仅在页面刷新时出现,您是否检查了整个代码中从头到尾插入新列表的请求的整个流程?听起来好像您的 ajax 请求没有以某种方式正确输入信息?如果列表视图闪烁且未显示结果,听起来您的列表视图现在创建正常,但没有任何内容可显示?如果没有更多 ajax 请求流的代码示例,我很难确定代码中的错误在哪里。您可以编辑以显示完整的代码工作流程
  • 还可以查看 Create vs Refresh:一个重要的区别段落,了解更多关于两者之间区别的详细信息:view.jquerymobile.com/1.3.2/dist/demos/faq/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多