1

我有一个用于加载服务器数据项的 JavaScript 代码段,并将它们插入到 UL 元素中,生成的 LI 元素如下所示:

函数加载新文件模板(){

    var list = _fileTemplateContainer.find("ul");

    $.submitToServer("[服务器 URL]", null, function (data) {

        list.empty();

        如果(数据==“”){
            list.append("模板不可用。"); // 在示例代码中,移除了 HTML 标签
        }
        别的 {
            $.each(数据,函数(索引,项目){

                var itemElement = $("[HTML 模板字符串]");

                itemElement.find("div[data-field='image']").css("background-image", "url(" + item.icon + ")");
                itemElement.find("div[data-field='caption']").text(item.caption);
                itemElement.find("div[data-field='description']").text(item.description);
                itemElement.find("div[data-field='type']").text(item.type);

                itemElement.bind("点击", function (e) {

                    $(e.target).parents("ul").find("li").removeClass("projectSelected");
                    $(e.target).parents("li").addClass("projectSelected");

                });

                itemElement.appendTo(list);

            });
        }

        控制台.log(列表);
    });

}

此代码在第一次加载时有效,但在第二次加载时,UI 无法在元素插入 UL 元素后刷新。

我确认数据插入成功(使用console.log()输出结果),所以我找不到这个问题的原因。

请查看此问题的屏幕截图。

如何解决这个问题?谢谢。

我的浏览器:Chrome 19.0.1084.56、IE 9.0.8112.16421 jQuery 版本 1.5.1

4

2 回答 2

1

我自己解决了这个问题。

我使用我的 jQuery 插件通过以下代码初始化此表单:

    designFrameManager.updateFrameBody(数据); // 数据是一个 HTML 字符串。

    projectDesigner = $(data).projectDesigner({
        高度:designFrameManager.getBodyHeight(),
        宽度:designFrameManager.getBodyWidth(),
        项目名称:名称
    });

updateFrameBody() 方法的代码:

    this.updateFrameBody = function (ui, initFunction) {

        _designFrameBody.html(ui);

        if (initFunction != null && $.isFunction(initFunction))
            初始化函数();

    };

我认为插件的初始化无法绑定到 DOM,因为 init 操作是在 UI 绑定到 DOM 之后,所以 DOM 无法在我的脚本调用后自动刷新更改。

所以,我将代码更新为:

    projectDesigner = $(data).projectDesigner({
        高度:designFrameManager.getBodyHeight(),
        宽度:designFrameManager.getBodyWidth(),
        项目名称:名称
    });

    designFrameManager.updateFrameBodyByObject(
       projectDesigner // 初始化对象
    );

updateFrameBodyByObject() 方法的代码:

   this.updateFrameBodyByObject = function (ui, initFunction) {

        _designFrameBody.html("");
        _designFrameBody.append(ui);

        if (initFunction != null && $.isFunction(initFunction))
            初始化函数();

    };

此问题已成功修复。

感谢所有回复。

于 2012-06-17T04:00:54.013 回答
0

尝试运行这个:$('ul').listview('refresh');

于 2012-06-14T08:05:16.127 回答