Ключевой элемент с использованием переходов при изменении данных состоит в том, что переход должен быть завершен перед удалением элемента из DOM (что немедленно приведет к удалению элемента из отображения).
Насколько я знаю, CanJS не имеет механизма ожидания процесса перед удалением узлов, поэтому подходящим обходным решением является наличие узла, который не удаляется при изменении содержимого. Вы можете структурировать свою разметку внутри этого узла, но переход Velocity должен произойти на постоянном узле, чтобы сделать переход успешным.
В качестве примера постепенного появления и исчезновения при настройке содержимого, помещаемого в контейнер перехода, следует использовать асинхронный установщик (с аргументами val
и resolve
) для правильной работы перехода. Сначала исчезните (и используйте возвращенное обещание подождать), затем обновите разметку новым содержимым (используя resolve()
), затем постепенно добавьте. Я создал JSBin, который демонстрирует эту концепцию, хотя содержимое внутри перехода очень просто в демоверсии.
https://jsbin.com/lesagebomu/edit?html,js,output
В случае компонента quizz-question
вы хотите отобразить весь компонент внутри div в fade-in
. Вероятно, есть также способ обобщить это в компонент более высокого порядка, используя, например, <div class="fade-in"><content /></div>
и некоторые манипуляции с данными.