От объекта JSON до табличного представления - PullRequest
0 голосов
/ 28 января 2012

Я уже некоторое время возился с этим, но, похоже, не могу этого сделать.

Я получаю задания в виде JSON-данных из моего API. Данные выглядят так, напечатанные с помощью 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 и как «подготовить» его, чтобы я мог использовать его в виде таблицы. Кто-нибудь может помочь мне здесь? Спасибо.

Ответы [ 3 ]

2 голосов
/ 28 января 2012

как уже указывал скайпантер.вам нужно проанализировать строку json для объекта.это хорошо объяснено на json.org .после того, как вы проанализировали вашу строку в объекте, легко получить доступ к ее членам и создать строку таблицы.

/* 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);

};
1 голос
/ 28 января 2012

responseText дает вам строку. Вы хотите, чтобы это был объект, который будет либо проходить по нему в цикле, либо пытаться поместить его в таблицу. Попробуйте JSON.parse (this.responseText), чтобы получить этот объект.

Свойство table.data ожидает массив объектов со свойствами, совпадающими со свойствами объекта Ti.UI.TableViewRow. Я не пытался вставить ваш код в проект. Но, похоже, ваши JSON-данные, если они будут преобразованы в объект, будут в порядке.

Другими словами, table.data = JSON.parse (this.responseText) должен работать. Переменные могут не входить в область видимости, поэтому вам может потребоваться сделать больше, чем просто вставить эту строку в обратный вызов onload.

0 голосов
/ 28 января 2012

Как только вы преобразуете строку в объект (через JSON.parse), это может помочь получить визуальное представление этого объекта - вы можете сделать это с моим компонентом dp_debug здесь:

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

Это не решит вашу проблему напрямую, но покажет, как именно этот объект «выглядит».

Он старый (древний в терминах JS), но я все еще считаю его безумно полезным для такого родавещь.Надеюсь, это поможет.

...