Подтвердить что ты не робот

Маршрутизация, выходы и анимация Ember.js

Кажется, что если вы хотите оживить переход между состояниями, используя новый маршрутизатор Ember.js и выходы, вам не повезло, так как предыдущий контент розетки будет уничтожен, прежде чем у вас будет возможность его оживить, В случаях, когда вы можете полностью оживить один вид до перехода в новое состояние, нет проблем. Это только тот случай, когда как старые, так и новые взгляды должны быть видны, что проблематично.

Похоже, что некоторые функции, необходимые для анимации как предыдущего содержимого, так и нового, были добавлены в this commit, Я не знаю, как это использовать.

Также обсуждалось использование дополнительных переходных маршрутов/состояний, чтобы явно моделировать "промежуточные" состояния, которые могут представлять анимации (здесь и здесь), но я не уверен, что в настоящее время можно сопоставить этот подход с выведенными контроллерами и представлениями.

Это похоже на How * not *, чтобы уничтожить View при выходе из маршрута в Ember.js, но я не уверен, что переопределение вспомогательного элемента outlet хорошее решение.

Любые идеи?

4b9b3361

Ответ 1

Вы должны проверить это: https://github.com/billysbilling/ember-animated-outlet.

Затем вы можете сделать это в своих шаблонах Handlebars:

{{animatedOutlet name="main"}}

И переход из этого маршрута следующим образом:

App.ApplicationRoute = Ember.Route.extend({
    showInvoice: function(invoice) {
        this.transitionToAnimated('invoices.show', {main: 'slideLeft'}, invoice);
    }
});

Ответ 2

В настоящее время я переопределяю didInsertElement и willDestroyElement в некоторых классах просмотра для поддержки анимации. didInsertElement немедленно скрывает элемент, а затем оживляет его в представлении. willDestroyElement клонирует элемент и оживляет его вне поля зрения.

didInsertElement: function ()
{
    this.$().slideUp(0);
    this.$().slideDown(250, "easeInOutQuad");
},

willDestroyElement: function ()
{
    var clone = this.$().clone();
    this.$().replaceWith(clone);
    clone.slideUp(250, "easeInOutQuad");
}

Лично я не хочу начинать обматывать свои выходные в избыточных ContainerView только для поддержки анимаций.