【问题标题】:jquery template not refreshing datajquery模板不刷新数据
【发布时间】:2013-06-30 09:48:40
【问题描述】:

我正在使用 jquery 模板从 WCF 服务加载数据。见下面的代码

function loadTableDetails(id) {

    var input =
    {
        Id: id,
    };
    self.TableDetailList([]);
    return $.ajax({
        url: "../Service/Table/TableList",
        type: "PUT",
        contentType: 'application/json',
        processData: false,
        data: JSON.stringify(input),
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        },
        success: function(allData) {
            var mappedData = $.map(allData, function(item) {

                return new TableDetailData(item);
            });

            self.TableDetailList(mappedData);
            $("#instructorTemplate").tmpl(self.TableDetailList())
                                    .appendTo("#instructorsList");


        }
    });

}

我将其绑定到如下视图

<table id="Table1" style="width: 100%;">
    <colgroup>
        <col class="tblResultsCol1" style="width: 20px" />
        <col class="tblResultsCol2" style="width: 80px" />

        <col />
    </colgroup>
    <script id="instructorTemplate" type="text/x-jquery-tmpl">

        <tr>


            <td style="padding: 0px; text-align: left">${Id}</td>
            <td style="padding: 0px;">${ListName}</td>

        </tr>
    </script>

    <tbody id="instructorsList">
    </tbody>
</table>

我在按钮的单击事件上调用此函数 loadTableDetails 并从选定的组合框项传递 Id。它第一次正确加载数据。但是当用户在组合框中选择另一个项目时,它会将旧结果中的数据添加到新结果中。简而言之,它会继续从先前的结果中添加数据。在再次调用服务之前,我还尝试清空可观察数组 self.TableDetailList([]),但这没有帮助。

有什么想法吗?

【问题讨论】:

    标签: jquery knockout.js jquery-templates


    【解决方案1】:

    在行中使用appendTo

    $("#instructorTemplate").tmpl(self.TableDetailList())
                            .appendTo("#instructorsList");
    

    您总是追加到现有表,因此新条目总是添加到末尾,而旧条目永远不会删除。

    所以你需要先empty()你的目标,然后附加新值:

    $("#instructorsList")
        .empty()
        .append($("#instructorTemplate").tmpl(self.TableDetailList());
    

    或者你使用html()的方法来替换#instructorsList的全部内容

    $("#instructorsList")
        .html($("#instructorTemplate").tmpl(self.TableDetailList());
    

    【讨论】:

    • 宾果游戏。工作完美。万分感谢。我正在加载超过 30K 的记录,所以可以使用 jquery 模板吗?加载数据不需要太多时间。
    • 现在面临一个问题。当我在我的表中加载那些 30K 记录时。滚动记录需要大量时间。我应该为此提出新问题吗?
    • 如果您遇到像这样的性能问题的新问题,通常的方法是提出一个新问题......但是 30K 很多记录......并且可能有很多潜在的原因对你来说慢一点。
    • 我提出了新问题stackoverflow.com/questions/17389512/… 接受这个问题的答案。请在其他问题上帮助我。
    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多