Javascript / Webix ссылаются на объекты как массивы - PullRequest
0 голосов
/ 02 ноября 2018

Это в первую очередь вопрос Javascript / JSON, однако, если кто-то знает о решении Webix, я также открыт для этого.

Фон

Я использую Webix в качестве структуры пользовательского интерфейса Javascript. В настоящее время я заполняю 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.

Как вы видите, я просто "иду в" 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 как отдельный объект, а не как совокупность объектов.

Так что мой вопрос таков:

Как я могу ссылаться на complexData.configs таким образом, чтобы Javsacript / Webix знал, что это коллекция / или массив?

или

Есть ли способ заставить (отобразить?) Webix для анализа complexData.configs, чтобы он распознал объекты внутри как строки с данными?

Спасибо.

1 Ответ

0 голосов
/ 02 ноября 2018

Существует довольно простое решение в Object.values()

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, однако есть несколько полифилл доступных

...