2

我正在data-role="list-divider"动态使用在列表视图中显示类别明智的数据。与list-divider我一起显示列表视图中每个项目的描述。但这些描述来自每个项目的相关文件。当我显示list-divider带有描述的列表视图时,我遇到了问题,然后列表视图显示为所有分隔符应首先组合,然后在显示带有描述的列表项下方。如何正确显示带有描述的列表视图。

http://jsfiddle.net/yC8VS/2/

$("#list").append('<li data-role="list-divider">' + section + '</li>');
$(this).children().each(function () {
   var content = $(this).text();
   var order = $(this).attr("order");
   var seq = order + '' + $(this).attr('order');
   var file = $(this).attr('file');
   $.mobile.activePage.append('<div id="files" style="display: none"></div>');
   $('#files').load(file, function (data) {
     var txt = $(data).find('p').text();
     $("#list").append('<li><a href="" class="style1" data-sequence="s' + seq + '" file="' + file + '"><h2>' + content + ' </h2><p class="description">' + txt + '</p></a></li>');
     $("#list").listview('refresh');
   });
});

提前致谢。

4

1 回答 1

3
$('#files').load(file, function (data)

是问题所在。这是一个异步函数,这意味着它不会阻塞。因此这些部分是在 load() 调用添加内容的函数之前添加的。

使用带有 async:false 的 ajax 加载数据,然后正确显示列表。


[编辑 1]

http://jsfiddle.net/uECUY/

展示了一些使异步调用同步的工作。很难它使用绑定功能,这可能不适用于所有平台(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

...您还可以更改超时功能的延迟,因为 50 毫秒是一个非常短的间隔,这会导致更高的负载...


[编辑 2]

为没有绑定功能的浏览器添加绑定功能,如上文章链接所述:

if (!Function.prototype.bind) {
    Function.prototype.bind = function (oThis) {
        if (typeof this !== "function") {
            // closest thing possible to the ECMAScript 5 internal IsCallable function
            throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
        }

        var aArgs = Array.prototype.slice.call(arguments, 1),
            fToBind = this,
            fNOP = function () {},
            fBound = function () {
                return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
                aArgs.concat(Array.prototype.slice.call(arguments)));
            };

        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP();

        return fBound;
    };
}

[编辑 3]

进一步改进了代码片段,无需绑定功能即可工作。

http://jsfiddle.net/uECUY/4/

于 2013-09-05T07:30:48.570 回答