Работает ли источник данных с данными YUI со всеми допустимыми объектами JSON? - PullRequest
1 голос
/ 25 мая 2011

Во-первых, я должен указать, что я подтвердил свой объект JSON с http://jsonlint.com, и он действительно действителен.

Теперь это не так, я смотрю на примерытаблицы данных YUI, в частности источника данных и структуры объектов JSON, которые используются в примерах (см. http://developer.yahoo.com/yui/examples/datatable/dt_basic.html).

В базовом примере используется источник данных, составленный следующим образом:

YAHOO.example.Data = {
  bookorders: [
    {id:"po-0167", date:new Date(1980, 2, 24), quantity:1, amount:4, title:"A Book About Nothing"},
    {id:"po-0783", date:new Date("January 3, 1983"), quantity:null, amount:12.12345, title:"The Meaning of Life"},
    {id:"po-0297", date:new Date(1978, 11, 12), quantity:12, amount:1.25, title:"This Book Was Meant to Be Read Aloud"},
    {id:"po-1482", date:new Date("March 11, 1985"), quantity:6, amount:3.5, title:"Read Me Twice"}
  ]
}

Принимая во внимание то, чтоJSON-объект выглядит следующим образом:

[
  {
    "Listing": {
        "Name": "Jay",
        "Address": "Main Street",
        "City": "New York"
    }
  },
  {
    "Listing": {
        "Name": "Thomas",
        "Address": "Union Street",
        "City": "New York"
    }
  },
  {
    "Listing": {
        "Name": "Jason",
        "Address": "Square Street",
        "City": "Boston"
    }
  }
]

Вот как пример Yahoo указывает источник данных и несколько других привязанных к нему строк:

var myDataSource = new YAHOO.util.DataSource(YAHOO.example.Data.bookorders);
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
myDataSource.responseSchema = {
  fields: ["id","date","quantity","amount","title"]
};

В моем объекте JSON каждый "Листинг"будет строка в таблице данных YUI. Что мне нужно изменить в коде YUI, чтобы он работал с моим объектом JSON?

Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2012

Выше вы определили объект, с безымянным массивом объектов, каждый объект состоит из другого объекта, с членами.Хотя это может быть допустимым JSON, я не думаю, что это совместимо с ожиданиями данных YUI.Это скорее надуманная или запутанная задача.

Я не могу предоставить способ, используя существующий объект JSON.Хотя ваш JSON действителен, IMHO, я не считаю, что он совместим с таблицей данных YUI.

Я думаю, что вам нужен объект, содержащий именованный массив объектов, имеющих члены, а не другие объекты.В существующей структуре данных слишком много слоев, которые не имеют для меня очевидной цели.

«Изменение», ниже, подразумевает изменение базового примера с данными, предоставленного YAHOO.

Простореструктурируя ваши данные следующим образом,

YAHOO.example.Data = {
  Listing: [
    {
          "Name": "Jay",
          "Address": "Main Street",
          "City": "New York"
    },
    {
          "Name": "Thomas",
          "Address": "Union Street",
          "City": "New York"
    },
    {
          "Name": "Jason",
          "Address": "Square Street",
          "City": "Boston"
    }
  ]
};

упростит вашу структуру данных и сделает эту работу.Я полагаю, что это минимальное изменение с учетом ограничений.

Затем измените источник данных:

var myDataSource = new YAHOO.util.DataSource(YAHOO.example.Data.Listing);

, и столбец определит

var myColumnDefs = [
      {key:"Name"},
      {key:"Address"},
      {key:"City"}
];

и, наконец, ответсхема

myDataSource.responseSchema = {
    fields: ["Name","Address","City"]
};

Надеюсь, что поможет.

...