Javascript / Webix 将对象引用为数组
Javascript / Webix referencing objects as arrays
这主要是一个 Javascript / JSON 问题,但是如果有人知道 Webix 解决方案,我也愿意接受。
背景
我正在使用 Webix as a Javascript UI framework. Currently I'm populating a Webix Datatable 和 JSON 看起来像这样的数据:
complexData = {
"metadata": {
"itemno": 111222333,
"groupid": 19,
"name": "Blah"
},
"configs": [
{
"id": 1,
"name": "First",
"description": "some stuff",
"value": 222
},
{
"id": 3,
"name": "Third",
"description": "Foo",
"value": 333
}
],
"system": null
}
我正在初始化我的 Datatable 组件,如下所示:
webix.ui({
view:"datatable",
columns:[
{ id:"id", header:"ID" },
{ id:"name", header:"Name" },
{ id:"description", header:"Description", fillspace: true },
{ id:"value", header:"Value" }
],
data: complexData.configs
});
效果很好。
你可以在这里看到它的样子:https://snippet.webix.com/4jd9cobb。
如您所见,我只是 'reaching into' complexData
并引用 configs
,为我的组件获取数据。
但是,(由于我需要稍后进行处理),我需要稍微更改我的数据结构。我需要 configs
中的对象根据它们的 id
进行键控,这可以是任意的。当然,这意味着 configs
现在是一个对象的对象,而不仅仅是一个数组:
complexData = {
"metadata": {
"itemid": 111222333,
"groupid": 19,
"name": "Blah"
},
"configs": {
"1": {
"id": 1,
"name": "First",
"description": "some stuff",
"value": 222
},
"3": {
"id": 3,
"name": "Third",
"description": "Foo",
"value": 333
}
},
"system": null
}
这不再呈现我的行。
这是它的样子:https://snippet.webix.com/n8ypdeia
详情
如果我 console.log
我的工作结果(数组),我得到这个:
(2) [{…}, {…}]
0: {id: 1, name: "First", description: "some stuff", value: 222 }
1: {id: 3, name: "Third", description: "Foo", value: 333 }
length: 2
我的失败结果(对象的对象)是这样的:
{1: {…}, 2: {…}}
1: {id: 1, name: "First", description: "some stuff", value: 222 }
3: {id: 3, name: "Third", description: "Foo", value: 333 }
因此 complexData.configs
在 Javascript / Webix 中显示为单个对象而不是对象集合。
所以我的问题是:
如何以 Javsacript / Webix 知道它是集合/或数组的方式引用 complexData.configs
?
或
有没有办法让(映射?)Webix 解析 complexData.configs
以便它将其中的对象识别为数据表行?
谢谢。
中可以找到一个相当简单的解决方案
const complexData = {
"configs": {
"1": {
"id": 1,
"name": "First",
"description": "some stuff",
"value": 222
},
"3": {
"id": 3,
"name": "Third",
"description": "Foo",
"value": 333
}
}
}
console.info(Object.values(complexData.configs))
这在任何版本的 Internet Explorer 中都不支持,但是有几个 polyfills 可用
这主要是一个 Javascript / JSON 问题,但是如果有人知道 Webix 解决方案,我也愿意接受。
背景
我正在使用 Webix as a Javascript UI framework. Currently I'm populating a Webix Datatable 和 JSON 看起来像这样的数据:
complexData = {
"metadata": {
"itemno": 111222333,
"groupid": 19,
"name": "Blah"
},
"configs": [
{
"id": 1,
"name": "First",
"description": "some stuff",
"value": 222
},
{
"id": 3,
"name": "Third",
"description": "Foo",
"value": 333
}
],
"system": null
}
我正在初始化我的 Datatable 组件,如下所示:
webix.ui({
view:"datatable",
columns:[
{ id:"id", header:"ID" },
{ id:"name", header:"Name" },
{ id:"description", header:"Description", fillspace: true },
{ id:"value", header:"Value" }
],
data: complexData.configs
});
效果很好。
你可以在这里看到它的样子:https://snippet.webix.com/4jd9cobb。
如您所见,我只是 'reaching into' complexData
并引用 configs
,为我的组件获取数据。
但是,(由于我需要稍后进行处理),我需要稍微更改我的数据结构。我需要 configs
中的对象根据它们的 id
进行键控,这可以是任意的。当然,这意味着 configs
现在是一个对象的对象,而不仅仅是一个数组:
complexData = {
"metadata": {
"itemid": 111222333,
"groupid": 19,
"name": "Blah"
},
"configs": {
"1": {
"id": 1,
"name": "First",
"description": "some stuff",
"value": 222
},
"3": {
"id": 3,
"name": "Third",
"description": "Foo",
"value": 333
}
},
"system": null
}
这不再呈现我的行。
这是它的样子:https://snippet.webix.com/n8ypdeia
详情
如果我 console.log
我的工作结果(数组),我得到这个:
(2) [{…}, {…}]
0: {id: 1, name: "First", description: "some stuff", value: 222 }
1: {id: 3, name: "Third", description: "Foo", value: 333 }
length: 2
我的失败结果(对象的对象)是这样的:
{1: {…}, 2: {…}}
1: {id: 1, name: "First", description: "some stuff", value: 222 }
3: {id: 3, name: "Third", description: "Foo", value: 333 }
因此 complexData.configs
在 Javascript / Webix 中显示为单个对象而不是对象集合。
所以我的问题是:
如何以 Javsacript / Webix 知道它是集合/或数组的方式引用 complexData.configs
?
或
有没有办法让(映射?)Webix 解析 complexData.configs
以便它将其中的对象识别为数据表行?
谢谢。
const complexData = {
"configs": {
"1": {
"id": 1,
"name": "First",
"description": "some stuff",
"value": 222
},
"3": {
"id": 3,
"name": "Third",
"description": "Foo",
"value": 333
}
}
}
console.info(Object.values(complexData.configs))
这在任何版本的 Internet Explorer 中都不支持,但是有几个 polyfills 可用