Представьте себе караоке-плеер/систему анимации по ключевым кадрам/и т. д., написанную на qooxdoo. Объект Player будет иметь свойство отражать текущую позицию. Свойство будет привязано к некоторому элементу управления графическим интерфейсом, например к ползунку, чтобы пользователь мог перейти в произвольную позицию. В то же время позиция будет постепенно обновляться механизмом воспроизведения во время воспроизведения.
Проблема в том, что в этих двух случаях следует применять разную логику.
1) Если свойство position задано извне (например, пользователь щелкнул ползунок), применяется некоторая сложная логика: мы должны пересчитать активный стих/строку/слог/пару ключевых кадров (возможно, используя бинарный поиск) и активировать it;
2) Если свойство было обновлено итерацией механизма воспроизведения, логика очень проста: мы должны только проверить, была ли пересечена граница следующего объекта, и перейти к ней.
В обоих случаях должна быть задействована стандартная логика (проверка экземпляра и запуск события изменения). Я думал либо обойти сложный метод «применить», установив переменную $$user_position напрямую, либо проанализировать текущий стек вызовов и выбрать разные пути в зависимости от этого, но оба метода кажутся грязными хаками. Поэтому я буду благодарен за любые рекомендации по реализации сказанного в qooxdoo the Right™ Way®.