В настоящее время я использую подход шины событий для синхронизации моделей и пользовательского интерфейса в моем приложении, но я столкнулся с препятствием в том, что трудно сделать его очень детализированным, например, на уровне свойств, где вы просто интересно узнать, обновляется ли свойство x
объекта, и существуют сотни или тысячи таких случаев.
Для такого мелкозернистого элемента управления вы можете проверить, как KVC (Key Value Coding) и KVO (Key Value Наблюдение) работают в Какао. Это в основном позволяет объекту наблюдать свойства любого другого объекта, если он использует некоторые основные принципы KVC. Заинтересованные объекты автоматически получают уведомление об изменениях, и вам не нужно явно уведомлять наблюдающие объекты о каждом изменении свойства, поскольку об этом заботится базовая реализация KVO. Это несколько похоже на прослушиватели PropertyChange в Java-бинах.
Если происходит слишком много наблюдений, и написание связующего кода для обновления моделей / представлений об изменениях свойств становится проблематичным, возможно, вы захотите сделать еще один шаг и иметь привязку данных для сохранения модели и виды синхронизированы. В основе концепции KVO лежит идея связать свойства объектов, чтобы изменение одного из них автоматически обновляло другое, и наоборот. Например, вы можете привязать текст в поле ответа SO к предварительному просмотру ответа, который мы видим ниже.
.bind('answer.value', 'answerPreview.text')
В этом случае оба элемента являются элементами представления, поэтому привязка данных является общим подходом и может использоваться для более точного связывания объектов, а не только пользовательского интерфейса с моделями.