Я надеюсь, что кто-то может предложить какое-то руководство.
Речь идет об оптимальном использовании Наблюдателей Аурелии.
Этот пример является вымышленным примером, иллюстрирующим воспринятую проблему.
Допустим, яимеют три свойства числа: часы, минуты, секунды, также известные как H, M, S и я хочу построить объект, который отслеживает H, M, S, и каждый раз, когда любое из этих трех изменений, он создает свойство T, которое выглядит как строкапродолжительность например«чч: мм: сс» с использованием свойств H, M, S с соответствующим заполнением нулями и т. д.
И наоборот, свойство T связано с пользовательским интерфейсом и, следовательно, если пользователь изменяет T (например, черезполе ввода), мне нужно разложить части T на их компоненты H, M, S и перенести отдельные значения обратно в свойства H, M, S.
Никто не должен потерятьэто поведение очень похоже на поведение преобразователя значений Aurelia с точки зрения поведения «toView» и «fromView», за исключением того, что мы имеем дело с 3 свойствами на одной стороне и 1 свойством на другой.
Реализацияв противном случае я могу использовать BindingEngine или ObserverLocator для создания наблюдателей на свойствах H, M, S и T и подписки на эти уведомления об изменениях.Легко понять, что это за бит.
Мой вопрос, в конечном счете, таков:
Когда изменяется H, это вызовет пересчет T, поэтому я напишу новое значение в T.
Изменение T вызовет уведомление об изменении для T, чей обработчик затем разложит значение T и запишет новые значения обратно в H, M, S.
Запись в H, M, S вызовет другое изменениеуведомление о создании нового T и т. д.
Кажется само собой разумеющимся, что, по крайней мере, ЖЕЛАТЕЛЬНО, когда мой объект-конвертер записывает свойства H, M, S, Tтогда он должен каким-то образом подготовиться к тому, чтобы игнорировать уведомление об изменениях, которое, как он ожидает, будет получено в результате.
Однако [легкость] сказать это и сделать это - две разные вещи.
Мой вопрос - действительно ли это вообще необходимо?Если это желательно, как мне сделать это как можно проще.Препятствия для этого заключаются в следующем:
Для получения уведомления об изменении должно быть реальное изменение значения, поэтому вам необходимо заранее знать, ожидаете ли вы его получить.Гораздо более сложная проблема заключается в том, что уведомления об изменениях выдаются через «синтетическую» очередь микро-задач Aurelia, поэтому вы очень не знаете, когда получите этот вызов микро-задачи.
Итак, есть лихорошее решение этой проблемы?Кто-нибудь на самом деле беспокоится об этом, или они просто полагаются на пункт 1, дающий самоограничивающий результат?То есть может быть несколько циклов уведомлений об изменениях, но процесс в конечном итоге будет согласен?