YUI数据表数据源是否适用于所有有效的JSON对象?

时间:2011-05-25 18:18:48

标签: javascript json datatable yui datasource

首先,我应该指出我使用http://jsonlint.com验证了我的JSON对象,它确实是有效的。

现在已经不在了,我正在查看YUI DataTable的示例,特别是示例使用的数据源和JSON对象的结构(请参阅http://developer.yahoo.com/yui/examples/datatable/dt_basic.html)。

基本示例使用如下组成的DataSource:

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对象中,每个“Listing”都是YUI DataTable中的一行。我需要在YUI代码中修改什么才能使它与我的JSON对象一起使用?

谢谢。

1 个答案:

答案 0 :(得分:0)

上面你定义了一个对象,带有一个未命名的对象数组,每个对象都由另一个对象组成,带有成员。虽然这可能是有效的JSON,但我认为这不符合YUI数据表的期望。这更像是一种人为或模糊的挑战。

我无法使用现有的JSON对象提供方法。虽然你的JSON是有效的,恕我直言,我不相信它与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);

和列defs

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

最后是响应模式

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

希望有所帮助。