Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2018, 17:30
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

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

Сейчас сохраняю в поле data. В Хроме нормально работает. Компилятор TypeScript иногда ругается, что не соответствует интерфейсу HTMLElement, но указание any эту проблему решает. Что на счет других браузеров? Можно так делать?
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2018, 09:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

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

"Сложные" объекты можно и в json формат перевести и хранить в любом текстовом поле...
Ответить с цитированием
  #3 (permalink)  
Старый 16.05.2018, 09:54
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

В свойствах - http://javascript.ru/tutorial/dom/attributes
<div id="dtest">test</div>
<script>
   dtest.mydata = {test1: 'раз', test2: 'два', test3: 'три', 4: 'четыре'};
   console.log(dtest.mydata);
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 16.05.2018, 10:47
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

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

Сообщение от Белый шум Посмотреть сообщение
В свойствах - http://javascript.ru/tutorial/dom/attributes
Моя data - это и есть свойство) dtest.data. Вопрос как раз в том, насколько кошерно добавлять свои свойства к DOM элементам. Может быть есть зарезервированные поля чтобы, например, хранить в них соответствующую элементу модель данных?
Ответить с цитированием
  #5 (permalink)  
Старый 16.05.2018, 11:17
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

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

Специально под это вроде бы не предусмотрено имён.
Ответить с цитированием
  #6 (permalink)  
Старый 16.05.2018, 11:24
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Shitbox2,
есть тип данных Map, где и можно хранить в качестве ключей DOM-элементы
Ответить с цитированием
  #7 (permalink)  
Старый 16.05.2018, 13:27
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Как вариант, можно использовать символ....
const data = Symbol("data");
myElement[data] = {};
Ответить с цитированием
  #8 (permalink)  
Старый 16.05.2018, 14:08
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Shitbox2, некоторые люди очень любят рыть подземный ход на чердак...
Может ты как раз этим и занимаешься.
Ответить с цитированием
  #9 (permalink)  
Старый 16.05.2018, 18:07
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

myElem._data = '...';
Ответить с цитированием
  #10 (permalink)  
Старый 17.05.2018, 11:06
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Сообщение от Белый шум Посмотреть сообщение
Shitbox2,
data - зарезервирована для "data-*", возможно поэтому и ругается.
Насколько знаю, dataset зарезервирована для "data-*",

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

Сообщение от Malleys Посмотреть сообщение
Как вариант, можно использовать символ....
Как вариант. Тогда конфликтов точно не будет

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

Сообщение от ruslan_mart Посмотреть сообщение
Рекомендовал бы называть свойства с префиксом "нижнее подчёркивание".
Хорошая рекомендация
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как установить значения поле name для каждого элемента формы autofan jQuery 0 27.07.2014 10:57
Проверка HTML элемента на существование MCTrane Общие вопросы Javascript 10 26.02.2014 20:51
Получить координаты курсора в текстовом поле в пикселях prike Events/DOM/Window 4 23.05.2013 04:35
Как то можно узнать ID HTML элемента вызвавшего JavaScript функцию? Opusel Events/DOM/Window 1 18.12.2011 18:36
Создание с помощью скрипта html элемента Anastasiya Общие вопросы Javascript 4 25.10.2011 22:28