【问题标题】:Display JSON object in YUI Datatable在 YUI 数据表中显示 JSON 对象
【发布时间】:2011-09-21 08:06:28
【问题描述】:

我正在尝试使用 YUI DataTable 显示以下 JSON 对象。我能够在 YUI DataTable 中成功显示 lastName、firstName、startDate、employeeCode、employeeStatus。但我无法显示内部对象中的值。在列集中,我尝试了 user.userId,它在 DataTable 中显示为 {value}

[    
{
            "lastName": "MyLastName",
            "firstName": "MyFirstName",
            "startDate": "11-11-11",
            "employeeCode": "124",
            "employeeStatus": "Permanent",
            "user": {
                "key": {
                    "name": null,
                    "parent": {
                        "name": null,
                        "parent": null,
                        "id": 855,
                        "namespace": "",
                        "complete": true,
                        "kind": "Employee"
                    },
                    "id": 856,
                    "namespace": "",
                    "complete": true,
                    "kind": "Users"
                },
                "salt": null,
                "userId": "myemail@example.com",
                "status": true,
},
{
...
}
]

这里是 Javascript 代码:

<script type="text/javascript">
YUI().use("jsonp", 'sortable', 'json-parse', 'datatable', "datatable-sort", "io", "node", function(Y) {
var nestedCols = [ 
    {key : "employeeCode",label : "Employee Code", sortable:true},
    {key : "firstName", label : "First Name",sortable: true},
    {key : "lastName", label : "Last Name", sortable:true},
    {key : "user.userId", label : "Email Id"},
    ];
Y.io('/Employee/AjaxList', {
on : {
success : function(tx, r) {
var data = Y.JSON.parse(r.responseText);
var table = new Y.DataTable.Base({
        columnset : nestedCols,
        recordset : data,
        }).plug(Y.Plugin.DataTableSort);
        table.render("#empTable");
}
}
});
});
</script>

这段代码sn-p有什么问题吗?如何在 DataTable 中显示 user.userId 的值?

注意:JSON 是使用 Jackson 生成的,应用程序是在 GAE/J 中开发的


更新:

我按照@Luke 的建议使用了DataSource。这次我得到了一个只有标题的空 DataTable。这是代码sn-p。

YUI().use("datasource-get", "datatable-base", "datatable-datasource","datasource-arrayschema", function (Y) {

var url = "/Employee/AjaxList?";
var dataSource, table;

dataSource = new Y.DataSource.Get({ source: url });

dataSource.plug(Y.Plugin.DataSourceArraySchema, {
        schema: {
                resultFields: ["firstName", "lastName"]
                }
        });

var cols = ["firstName", "lastName"];

table = new Y.DataTable.Base({
                columnset: cols,
});

table.plug(Y.Plugin.DataTableDataSource, { datasource: dataSource });

table.render("#empTable");

table.datasource.load();
});

【问题讨论】:

    标签: javascript json yui yui-datatable


    【解决方案1】:

    您需要使用 datasource-jsonschema 来解析嵌套值。看这个例子:http://yuilibrary.com/yui/docs/datatable/datatable-dsget.html

    您应该能够按照这些步骤操作,将 Y.DataSource.Get 替换为 Y.DataSource.IO

    【讨论】:

    • 我尝试使用数据源,但现在似乎 YUI 向服务器发送了错误的请求。这是我从萤火虫控制台得到的 URL:localhost:8080/ExampleApp/Employee/… 正确的 url 是 localhost:8080/ExampleApp/Employee/AjaxList
    • 请忽略上面的评论,我通过附加一个'?'解决了这个问题在源网址的末尾。但是数据仍然没有在数据表中显示。我可以在 firebug 控制台中看到 JSON 数据。
    • 我已经使用 datasource-arrayschema 用脚本更新了这个问题。我相信我得到的响应是一个数组,我无法识别 datasource-jsonschema 的 resultListLocator
    【解决方案2】:

    我在论坛发帖后从 YUI 论坛获得了解决方案:http://yuilibrary.com/forum/viewtopic.php?f=92&t=8685

    这是对我有用的代码:

    YUI().use( "datasource-io", "datasource-jsonschema", "datatable-base", "datatable-datasource", "datatable-scroll", 
               function (Y) {
        var cols = [    
                { key: "name", label: 'Name'  }, 
                { key: "email",  label: "Email"  },
                { key: "user.username", label: 'Username'  },
                { key: "user.password", label: 'Password'  },
            ];
        car url = "/Employee/AjaxList";
        var ds = new Y.DataSource.IO( { 
            source:url
         });
         ds.plug(Y.Plugin.DataSourceJSONSchema, {
                schema: {
                    resultFields: [ 'name', 'email', 'user.username', 'user.password' ],
                }
            });
        var dt = new Y.DataTable.Base({
            columnset:cols } )
            .plug(Y.Plugin.DataTableDataSource, {datasource:ds});
        dt.render("#dtable");
        dt.datasource.load();
    });
    

    希望这可以帮助那些在 DataTable 和 DataSource 上苦苦挣扎的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多