Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Слежение за объектом (https://javascript.ru/forum/events/24745-slezhenie-za-obektom.html)

inst 12.01.2012 18:54

Слежение за объектом
 
Добрый день. Ищу совета.

Вкратце: как кроссбраузерно повесить слушатель изменений одного массива? Как это работает?

Подробности
Принцип такой: есть на HTML-странице некий изначально пустой ненумерованный список. Просто
<ul></ul>
И во время загрузки с сервера запрашивается JSON объект примерно такого вида:
{
	"item1": {
		"icon": "icon.png",
		"text": "Подпись значка"
	},
	"item2": {
		"icon": "icon2.png",
		"text": "Подпись другого значка"
	}
}

После обработки объекта в список добавляются все перечисленные пункты. Ссылка на этот массив сохраняется.

Теперь хочу сделать, чтобы все изменения, внесённые в этот массив автоматически отображались на список на странице.

В связи с этим вопрос: это же возможно? Всё что мне удалось найти своими силами это некий фреймворк tent, писанный каким-то дядей, но он мне показался слишком монструозным для такой задачи. Может существует что-то полегче, чего я не нашёл?

trikadin 12.01.2012 19:10

Просто сделайте свои ф-ции изменения этого объекта, которые будут вызывать обработчик.

inst 12.01.2012 19:23

Да, такой вариант тоже рассматривается, но это на крайний случай.

Всё же хотелось бы что-нибудь наиболее простое с точки зрения результирующего API.

trikadin 12.01.2012 19:26

Это не крайний случай, это правильное решение)

KupueIIIKo 12.01.2012 19:28

Сравнивать) того чего нет добавлять с помощью innerHTML то что пропало удалять если я правильно понял

inst 12.01.2012 19:45

Цитата:

Сообщение от trikadin (Сообщение 149913)
Это не крайний случай, это правильное решение)

Вероятно, это так, но выглядит довольно избыточно: добавить элемент списка, удалить, изменить его имя, иконку, текст, переместить в списке выше, ниже. Всё это лишние сущности, как мне кажется. А если структура объекта немного изменится?

inst 12.01.2012 19:46

Цитата:

Сообщение от KupueIIIKo (Сообщение 149915)
Сравнивать) того чего нет добавлять с помощью innerHTML то что пропало удалять если я правильно понял

Отчего же заниматься тем, с чем браузер теоретически и сам неплохо справляется? :)

trikadin 12.01.2012 20:05

Цитата:

Сообщение от inst
Вероятно, это так, но выглядит довольно избыточно: добавить элемент списка, удалить, изменить его имя, иконку, текст, переместить в списке выше, ниже. Всё это лишние сущности, как мне кажется. А если структура объекта немного изменится?

Сделайте класс Menu, в нём сделайте методы changeIcon, changeText, moveToPosition... В этих методах добавьте вызов обработчика. А если структура объекта немного изменится - добавите новые методы. Это в любом случае лучше, чем менять св-ва объекта напрямую.

poorking 12.01.2012 20:58

Object.prototype.watch|unwatch - то что нужно, можно слушать изменение значений переменных

trikadin 12.01.2012 21:07

poorking, а можно поподробнее?


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