qooxdoo: как выбрать разные сценарии в методе применения в зависимости от контекста вызова?

Представьте себе караоке-плеер/систему анимации по ключевым кадрам/и т. д., написанную на qooxdoo. Объект Player будет иметь свойство отражать текущую позицию. Свойство будет привязано к некоторому элементу управления графическим интерфейсом, например к ползунку, чтобы пользователь мог перейти в произвольную позицию. В то же время позиция будет постепенно обновляться механизмом воспроизведения во время воспроизведения.

Проблема в том, что в этих двух случаях следует применять разную логику.

1) Если свойство position задано извне (например, пользователь щелкнул ползунок), применяется некоторая сложная логика: мы должны пересчитать активный стих/строку/слог/пару ключевых кадров (возможно, используя бинарный поиск) и активировать it;
2) Если свойство было обновлено итерацией механизма воспроизведения, логика очень проста: мы должны только проверить, была ли пересечена граница следующего объекта, и перейти к ней.

В обоих случаях должна быть задействована стандартная логика (проверка экземпляра и запуск события изменения). Я думал либо обойти сложный метод «применить», установив переменную $$user_position напрямую, либо проанализировать текущий стек вызовов и выбрать разные пути в зависимости от этого, но оба метода кажутся грязными хаками. Поэтому я буду благодарен за любые рекомендации по реализации сказанного в qooxdoo the Right™ Way®.


person Sebastian Widmer    schedule 05.08.2013    source источник


Ответы (1)


Я думаю, что общий шаблон для такой ситуации — не нагружать само свойство слишком большим количеством функций (имеется в виду: его метод применения). Вместо этого оставьте свойство довольно простым и используйте его только для записи текущей позиции. Затем разработайте такие методы, как «goto» и «next», которые оба обновляют свойство position, хотя и с разными алгоритмами, как вы написали.

person ThomasH    schedule 08.08.2013