Найти все виды определенного типа, отображаемые в настоящее время в BackboneJS или BackboneLayout
Этот проект использует BackboneJS с BackboneLayout.
Существует довольно сложная иерархия взглядов - в некоторых случаях от четырех до пяти уровней.
У меня есть ситуация, когда я хотел бы, чтобы одно представление вызывало изменение другого представления, но слушатели не являются опцией. (приводит к слишком большому количеству слушателей, убивает память).
Top -> X -> Y
Top -> B -> C -> D -> E
Top
является видом верхнего уровня, который имеет один X
вид, который имеет несколько Y
Просмотры.Top
представление также содержит один B
вид, который содержит несколько B
представления, каждый из которых содержит несколько C
представления, каждый из которых содержит несколько D
представления, каждый из которых содержит несколько E
Просмотры.
Изменение в Y
вид должен влиять на все E
просмотров, которые в настоящее время оказываются. Это было бы идеально для слушателей, если бы не проблема, упомянутая ранее. Поэтому я ищу альтернативный способ сделать то же самое.
Я думаю о получении Top
посмотреть, чтобы найти все его потомки, которые имеют тип E
, Или что-то вдоль этих линий. Другие решения тоже приветствуются.
Благодарю.
1 ответ
Да я бы Top
вести список всех E
экземпляры - это будет просто что-то в коде приложения, может быть в E.initialize()
или через ваши собственные методы для добавления / удаления узлов в иерархии вашего представления, если они у вас есть - и это собственный обработчик событий, который прослушивает change
события на всех Ys, и повторно отображает E
s. Если слушать непомерно дорого Y
изменения, вызвать кастом Y-change
(или что-то еще) событие на вашем Top
из вашего кода приложения в Y
и попросите Top прослушать это событие.
Очень легко получить список E-экземпляров, не синхронизированных, но, вот почему слушатели существуют. Пройдите осторожно и убедитесь, что сверху есть крюки в каждой точке вниз B->C->D->E
дерево и знает, какие изменения нужно внести в его (по существу денормализованный) список E
это когда есть изменения.