Мне интересно, где следует устанавливать события в отношениях родитель-ребенок.Это не конкретная проблема, я полагаю, только лучшие практики.Мой конкретный случай:
У меня есть Dropdown
, который содержит Button
и List
.Описывая действие, вы нажимаете кнопку, и появляется список.Вы щелкаете элемент в списке, и этот элемент выбирается, и список исчезает.
Итак, во-первых, поскольку представление инициализировано как Dropdown
, человеку, создающему его, не нужнодостичь и разобраться с видом Button
или List
.Все методы должны вызываться в родительском представлении, а события могут нуждаться в пузыре от дочернего элемента.
Так, например, вместо выполнения: this.dropdown.button.press();
, Dropdown
предоставляет свой собственный press
методкоторый просто вызывает метод нажатия Button
.
Когда пользователь нажимает кнопку, Button
запускает событие press
, которое Dropdown
слушает.
onButtonPress : function () {
if (!this.isExpanded()) {
this.expand();
}
this.trigger('press');
},
И Dropdown
вызывает нажатие на себя, так что разработчик может получить событие печати, не доходя до dropdown.button
.
Вот где возникает первый вопрос.Должен ли Dropdown
развернуться в onButtonPress
или onButtonPress
просто вызвать нажатие, и затем расширение будет прослушивать собственное press
событие Dropdown
:
onButtonPress : function () {
this.trigger('press');
},
onPress : function () {
if (!this.isExpanded()) {
this.expand();
}
},
И затемстановится более сложным, если Dropdown
метод expand
просто вызовет expand
на себе:
expand : function () {
if (this.isEnabled()) {
this.setState('expanded', true);
this.trigger('expand');
}
return this;
},
onExpand : function () {
this.list.show();
},
или это будет show
s List
:
expand : function () {
if (this.isEnabled()) {
this.setState('expanded', true);
this.list.show();
this.trigger('expand');
}
return this;
},
Полагаю, мне просто интересно узнать, как лучше решить, где связывать события в отношениях родитель / ребенок.Как избежать запутанных ситуаций и, возможно, циклического вызова событий.
У кого-нибудь есть мысли?