如何从JSON数组动态构建表?

时间:2016-07-20 23:22:19

标签: javascript cordova enyo

我在Enyo视图中放置了一个AJAX GET调用。 GET调用一个Web服务,该服务返回包括列标题的记录数组。

我的目标是使用这个返回的数组动态构建一个表,其中为索引中的每个头的每个索引和列创建一行。

我对Enyo的了解是通过将AJAX响应头映射到组件字段来创建一条记录:

        this.$.actionsTaken.setContent( inResponse.ActionsTaken);

但我不确定如何动态动态并动态创建表格。

例如,当我检查Web服务响应时,我的索引0包含以下内容:(其中ActionsTakenApplicationEM是col标头。)

{
    ActionsTaken: "Tested uptime"
    Application: "2011 Hanko"
    EM: "EM102 "
}

问题:

如何从JSON数组动态构建表?

AJAX GET:

 fetch: function() { 
    var ajax = new enyo.Ajax({


        url: "http://testservice.net/WebService/GetHistory",
        async: false,
        handleAs:"json",
        xhrFields: {withCredentials: true}

    });        

    ajax.go(this.data);      
    ajax.response(this, "gotResponse");
    ajax.error(this, function(inSender, inError) {
        Misc.hideMask();
        ViewLibrary.back();
        Misc.showToast("Error retrieving data");
    });

},
gotResponse: function(inSender, inResponse)
{

    var debugVar = inResponse;


        this.$.actionsTaken.setContent( inResponse.ActionsTaken);
        this.$.configurationItemLogicalName_value.setContent( inResponse.Application);
        this.$.eM.setContent( inResponse.EM);


},

包含数据值的组件:

{name:"outage_table", kind: "FittableRows",components:[

            {content: "Actions Taken",                     name: "actionsTaken",           },
            {content: "Application",          name: "application",      },
            {content: "EM",          name: "eM",      },


        ]}

1 个答案:

答案 0 :(得分:1)

根据所有数据的复杂程度,您可以相当简单地完成此操作。遍历您的数组和每个对象,然后您可以遍历其键并使用其数据创建每个列。

类似的东西:

y

我认为问题在于您创建了与此示例数据匹配的命名组件,但不知道它们是否始终是相同的键?

你可以使用一种(enyo.DataTable,令人惊讶的是,我从未使用过)。它允许您添加行(没有标题),因此您可以从所有对象键创建第一行,然后下一行将是这些键的数据。它派生自DataRepeater,因此可能会有一些实现,例如使用enyo.Collection来存储数据,然后将集合设置为DataTable。

另一种与您的产品更接近的替代方案是在您需要时动态创建组件:

for (var k in theObject) {
    // make column k
    // add theObject[k] to it
}