Кто-нибудь нашел хороший способ оживить переходы состояния?
Маршрутизатор немедленно удаляет вид из DOM. Проблема в том, что я не могу отложить это до конца анимации. Примечание. Я использую v1.0.0-pre.4.
Кто-нибудь нашел хороший способ оживить переходы состояния?
Маршрутизатор немедленно удаляет вид из DOM. Проблема в том, что я не могу отложить это до конца анимации. Примечание. Я использую v1.0.0-pre.4.
Billy Billing только что выпустил модуль Ember, который поддерживает анимированные переходы.
Я объясню ответ Лесика. Если вам нужно применить его к нескольким представлениям сухим способом, вы можете создать класс настройки следующим образом:
App.CrossfadeView = {
didInsertElement: function(){
//called on creation
this.$().hide().fadeIn(400);
},
willDestroyElement: function(){
//called on destruction
this.$().slideDown(250);
}
};
И затем в вашем коде вы применяете его на разных классах. Поскольку Ember зависит от jQuery, вы можете использовать практически любую анимацию jQuery.
App.IndexView = Ember.View.extend(App.CrossfadeView);
App.PostView = Ember.View.extend(App.CrossfadeView);
В этом же требовании добавьте мое приложение. Попробовал Ember Animated Outlet, но не дал необходимой мне гранулярности (анимации, специфичные для отдельных элементов).
Решение, которое сработало для меня, было следующим:
Изменить ссылкуТак как действие
{{#linkTo "todos"}}<button>Todos</button>{{/linkTo}}
становится...
<a href="#/todos" {{action "goToTodos"}}><button>Todos</button></a>
Создать метод для goToTodos в текущем контроллере
App.IndexController = Ember.Controller.extend({
goToTodos: function(){
// Get Current 'this' (for lack of a better solution, as it late)
var holdThis = this;
// Do Element Specific Animation Here
$('#something').hide(500, function(){
// Transition to New Template
holdThis.transitionToRoute('todos');
});
}
});
Наконец - для анимации в элементах шаблона Todos используйте didInsertElement в представлении
App.TodosView = Ember.View.extend({
didInsertElement: function(){
// Hide Everything
this.$().hide();
// Do Element Specific Animations Here
$('#something_else').fadeIn(500);
}
});
До сих пор это самое элегантное решение, которое я нашел для анимации, специфичной для элемента при переходе. Если есть что-то лучше, хотелось бы услышать!
Я знаю, что это довольно старый, но лучшим решением для этой контекстно-зависимой анимации сегодня является ember liquid fire.
Он позволяет делать такие вещи в файле перехода:
export default function(){
this.transition(
this.fromRoute('people.index'),
this.toRoute('people.detail'),
this.use('toLeft'),
this.reverse('toRight')
);
};
Я нашел другое решение, которое реализует анимацию в Views: ember-animate
Пример:
App.ExampleView = Ember.View.extend({
willAnimateIn : function () {
this.$().css("opacity", 0);
},
animateIn : function (done) {
this.$().fadeTo(500, 1, done);
},
animateOut : function (done) {
this.$().fadeTo(500, 0, done);
}
}
Демо: авторский личный сайт
App.SomeView = Ember.View.extend({
didInsertElement: function(){
//called on creation
this.$().hide().fadeIn(400);
},
willDestroyElement: function(){
//called on destruction
this.$().slideDown(250)
}
});