Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   В каком поле html элемента лучше хранить данные? (https://javascript.ru/forum/misc/73778-v-kakom-pole-html-ehlementa-luchshe-khranit-dannye.html)

Shitbox2 14.05.2018 17:30

В каком поле html элемента лучше хранить данные?
 
Имею в виду сложные данные (объекты), не примитивы. Т.е. поле dataset тут не подходит. Данные не должны появляться в аттрибутах.

Сейчас сохраняю в поле data. В Хроме нормально работает. Компилятор TypeScript иногда ругается, что не соответствует интерфейсу HTMLElement, но указание any эту проблему решает. Что на счет других браузеров? Можно так делать?

ksa 16.05.2018 09:11

Shitbox2, ты бы хоть примеры какие тестовые сделал...

"Сложные" объекты можно и в json формат перевести и хранить в любом текстовом поле...

Белый шум 16.05.2018 09:54

В свойствах - http://javascript.ru/tutorial/dom/attributes
<div id="dtest">test</div>
<script>
   dtest.mydata = {test1: 'раз', test2: 'два', test3: 'три', 4: 'четыре'};
   console.log(dtest.mydata);
</script>

Shitbox2 16.05.2018 10:47

Цитата:

Сообщение от ksa (Сообщение 485388)
"Сложные" объекты можно и в json формат перевести и хранить в любом текстовом поле...

Сложные объекты как раз нельзя в json перевести) Там и даты могут быть и циклические ссылки и просто ссылки на другие объекты и черт возьми что. Даже если и можно, то это такая потеря производительности... Мой пример это тупо хранение модели данных в соответствующем элементе. Можно конечно строковые идентификаторы генерить как это делают фреймворки и ReactJS, но это слишком заморочено в моем случае.

Цитата:

Сообщение от Белый шум (Сообщение 485392)

Моя data - это и есть свойство) dtest.data. Вопрос как раз в том, насколько кошерно добавлять свои свойства к DOM элементам. Может быть есть зарезервированные поля чтобы, например, хранить в них соответствующую элементу модель данных?

Белый шум 16.05.2018 11:17

Shitbox2,
data - зарезервирована для "data-*", возможно поэтому и ругается.

Специально под это вроде бы не предусмотрено имён.

destus 16.05.2018 11:24

Shitbox2,
есть тип данных Map, где и можно хранить в качестве ключей DOM-элементы

Malleys 16.05.2018 13:27

Как вариант, можно использовать символ....
const data = Symbol("data");
myElement[data] = {};

ksa 16.05.2018 14:08

Shitbox2, некоторые люди очень любят рыть подземный ход на чердак...
Может ты как раз этим и занимаешься. ;)

ruslan_mart 16.05.2018 18:07

HTMLElement - это обычный объект, по факту. Так что, называйте свойство как хотите, главное - чтобы не было конфликтов. Рекомендовал бы называть свойства с префиксом "нижнее подчёркивание".

myElem._data = '...';

Shitbox2 17.05.2018 11:06

Цитата:

Сообщение от Белый шум (Сообщение 485403)
Shitbox2,
data - зарезервирована для "data-*", возможно поэтому и ругается.

Насколько знаю, dataset зарезервирована для "data-*",

Цитата:

Сообщение от destus (Сообщение 485405)
Shitbox2,
есть тип данных Map, где и можно хранить в качестве ключей DOM-элементы

Да, думал об этом. Если будут проблемы с кастомными полями, то буду использовать Map.
Пока немного проще "model = element.data" чем "model = models[element]"

Цитата:

Сообщение от Malleys (Сообщение 485421)
Как вариант, можно использовать символ....

Как вариант. Тогда конфликтов точно не будет

Цитата:

Сообщение от ksa (Сообщение 485431)
Shitbox2, некоторые люди очень любят рыть подземный ход на чердак...
Может ты как раз этим и занимаешься. ;)

Не, я как раз сделал самое простое - вошел через окно)

Цитата:

Сообщение от ruslan_mart (Сообщение 485461)
Рекомендовал бы называть свойства с префиксом "нижнее подчёркивание".

Хорошая рекомендация


Часовой пояс GMT +3, время: 04:21.