【问题标题】:From JSON object to Tableview从 JSON 对象到 Tableview
【发布时间】:2012-02-20 21:12:25
【问题描述】:

我已经搞砸了一段时间了,但我似乎无法完成它。

我从我的 API 中获取 JSON 数据形式的任务。数据长这样,用Ti.API.info(this.responseText)打印:

[INFO] [{"created_at":"2012-01-09T15:05:25Z","description":"Smullen van onze pizza","id":1,"title":"Pizza Eten","updated_at":"2012-01-09T15:05:25Z","user_id":11},{"created_at":"2012-01-09T15:05:25Z","description":"Lekker Lekker!","id":21,"title":"Ice-Tea Drinken","updated_at":"2012-01-09T15:05:25Z","user_id":11}]

我不太确定如何处理这些数据。我尝试了几件事:

getData.onload = function(){
    var tasks = this.responseText;
    for(t in tasks) {
        Ti.API.info(t);
    }
        }

这个打印出来的:

[INFO] 0
[INFO] 1
[INFO] 2
[INFO] 3
[INFO] 4
[INFO] 5
[INFO] 6

直到 306。

我尝试的另一件事是:

var tasks = this.responseText;
for(t in tasks)
{
    if(tasks.hasOwnProperty(t))
    {
        Ti.API.info(t + " -> " + tasks[t]);
    }
}

这给了我:

[INFO] 0 -> [
[INFO] 1 -> {
[INFO] 2 -> "
[INFO] 3 -> c
[INFO] 4 -> r
[INFO] 5 -> e
[INFO] 6 -> a
[INFO] 7 -> t
[INFO] 8 -> e
[INFO] 9 -> d

再试一次:

var tasks = this.responseText;
for(t in tasks)
{
    Ti.API.info(t.title);
}

给:

[INFO] <null>
[INFO] <null>
[INFO] <null>

我真的很困惑如何处理这个 JSON 以及如何“准备”它以便我可以在 tableview 中使用它。任何人都可以在这里帮助我吗?谢谢。

【问题讨论】:

    标签: javascript json titanium appcelerator appcelerator-mobile


    【解决方案1】:

    responseText 给你一个字符串。您希望它成为一个对象,以便在您尝试时循环遍历它或将其放入表中。尝试 JSON.parse(this.responseText) 来获取该对象。

    table.data 属性需要一个对象数组,其属性与 Ti.UI.TableViewRow 对象的属性一致。我还没有尝试将您的代码放入项目中。但看起来你的 JSON 数据,如果转换为一个对象,就可以很好地排列。

    换句话说,table.data = JSON.parse(this.responseText) 应该可以工作。变量可能不在范围内,因此您可能需要做的不仅仅是将该行放入您的 onload 回调中。

    【讨论】:

    • 如果我把 JSON.parse 行然后做: for(t in tasks) { Ti.API.info(t.title); },我仍然得到 两次。有什么想法吗?感谢您的快速回复。
    • 在您的语句中,“t”是任务数组的索引。这不是对象本身。 tasks[t].title 会产生你期望的结果。
    【解决方案2】:

    一旦您将字符串转换为对象(通过 JSON.parse),它可能有助于获得该对象的视觉表示 - 您可以在此处使用我的 dp_debug 组件来做到这一点:

    http://depressedpress.com/javascript-extensions/dp_debug/

    这不是直接解决您的问题,而是会准确显示该对象的“外观”。

    它很旧(在 JS 术语中很古老),但我仍然发现它对这种事情非常有用。希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      正如天豹已经指出的那样。您需要将您的 json 字符串解析为一个对象。 json.org 对此进行了很好的解释。将字符串解析为对象后,很容易访问其成员并创建 tableview 行。

      /* create the tableview row */
      makeTableViewRow = function(_object){
      
        var row = Ti.UI.createTableViewRow({
           ...
        }]
      
        var title = Ti.UI.createLabel({
           ...
           text: _object.title,
           ...
        });
        row.add(title);
      
        return row;
      };
      
      
      getData.onload = function(){
        var tasks = json.parse(this.responseText), /* parse the json string */
            _rowsForTableView = []; /* put the rows in here */
      
        /* create the rows */
        for (i in tasks){
           var _row = makeTableView(tasks[i]);
           _rowsForTableView.push(_row);
        };
      
        myTableView.setData(_rowsForTableView);
      
      };
      

      【讨论】:

        猜你喜欢
        • 2021-12-24
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2013-05-26
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        相关资源
        最近更新 更多