0

这个问题被问了很多,并且在过去的 3 天里经历了许多不同的“解决方案”,但我都无法开始工作。

我有一个巨大的 JSON 文件,大约 150k 条目,我想在 JQuery Mobile 中将其视为 ListVIew。(我将使用过滤器来实际使用数据)

我想出的最好的是这个

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/jqm-docs.css" />
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>




</head>

<body>
    <div data-role="page">
    <div data-role="content">
        <div id="output">
            <ul data-role="listview" data-inset="true" data-filter="true">

            </ul>
        </div>
    </div>
</div>


<script type="text/javascript">
        //simulating the JSON coming from the server
var json = '["City1","City2","City3"]';
//jQuery getJSON will do this step
var data = $.parseJSON(json);

//and this is your code
$.each(data, function (index, value) {
        $('#output').children('ul').append('<p>'+value+'</p>').listview('refresh');
});

</script> 

</body>
</html>

如果我删除 .listview('refresh') 那么所有三个 JSON 条目都列在同一个 ListView 字段中。我显然希望他们分开。

谁能建议如何做到这一点?

感谢

蒂姆

4

3 回答 3

2

为了首先使用$.parseJSON你需要有正确的JSON 字符串格式

所以我猜你的变量

var json = '["City1","City2","City3"]';

应该看起来更像:

var json = '{"city":"City1"},{"city":"City2"},{"city":"City2"}';

然后在将其转换为 JSON 之前,您宁愿先拆分它

var jsonSplit = json.split(',');

并将数组中的每个分隔部分转换为 JSON

var data = new Array(), i;
for(i in jsonSplit){
 if(jsonSplit[i].length){ //remove last empty element after .split()
  data[i] = $.parseJSON(jsonSplit[i]);
 }
}

然后您可以data将其作为 javascript 对象进行操作

于 2012-06-10T22:56:39.800 回答
1

你缺少li元素。

$.each(data, function (index, value) {
        $('#output').children('ul').append('<li><p>'+value+'</p></li>').listview('refresh');
});
于 2012-06-10T21:49:59.933 回答
1
$.each(data, function (index, value) {
        $('#output').children('ul').append('<li><p>'+value+'</p></li>').listview('refresh');
});

根据您在此处执行的操作删除 Listview(refresh),您不需要每次都刷新。如果您通过说 php 动态添加它...您需要在最后刷新。

$.each(data, function (index, value) {
        $('#output').children('ul').append('<li><p>'+value+'</p></li>');
});
于 2012-07-16T15:05:21.150 回答