Допустим, у меня есть два контроллера-представления - ItemsContainer
, Item
и хранилище ItemsStore
, в котором хранится список элементов. Когда список элементов изменяется из-за какого-либо действия, хранилище выдает изменение, и оба представления получают свое состояние из ItemsStore
.
ItemsContainer
вызывает getItems
и перерисовывает список элементов. Item
вызывает метод getItem
со своим идентификатором и перерисовывает себя.
Итак, как проще всего вывести на экран несколько ItemsContainer
?
Я могу переписать ItemsStore
так, чтобы он хранил свои данные в карте id -> storeData
, но это означало бы, что каждому методу ItemsStore
потребуется еще один параметр storeId
, также передаваемый ему. getItems()
становится getItems(storeId)
, getItem(itemId)
становится getItem(storeId, itemId)
, что выглядит слишком уродливо. Действия также потребуют прохождения storeId
.
Другой способ, как я понял, это создание хранилища, которое бы управляло данными ItemsStore
, и повторно инициализировало бы его, вызывая действие STORE_UPDATE
.
Проблема с этим методом заключается в том, что если у нас есть два (A и B) ItemsContainer
, и активным контейнером является A, так что ItemsStore
содержит элементы, которые отображаются в A, контейнер B все равно будет прослушивать ItemsStore
изменения. Я могу добавить проверку, если это активный контейнер в методе ItemsContainer.onChange
, но я не уверен, что это нужно делать.