В настоящее время я использую проект ember cli для создания моего приложения ember, но у меня возникает проблема с настройкой моей навигации. Следующий блок кода работает на маршрутизаторе индекса, однако я столкнулся с проблемой на других моих маршрутизаторах. Раздел goToAnchor позволяет мне перемещаться по тегам привязки к страницам на одном бесконечном прокрутке, таком как домашняя страница, но когда я перехожу к другим представлениям, то есть к странице my/terms, мне нужно, чтобы меню можно было щелкнуть на домашней странице, в идеале без обновление браузера.
Возможно ли это без обновления?
Index Router:
export default Ember.Route.extend({
actions: {
goToAnchor: function(item,anchor) {
var $elem, $scrollTo;
$elem = $('#' + anchor);
$scrollTo = $('body').animate({
scrollTop: $elem.offset().top-15
}, parseInt(ENV.CONFIG.PRODUCT.SCROLL_SPEED));
this.transitionTo(item.route).then($scrollTo);
}
}
});
Навигация:
<section class="top-bar-section center">
<ul class="nav-header">
<li><a {{action goToAnchor 'index' 'menu1'}}>menu1</a></li>
<li><a {{action goToAnchor 'index' 'menu2'}}>menu2</a></li>
<li><a {{action goToAnchor 'index' 'menu3'}}>menu3</a></li>
<li><a {{action goToAnchor 'index' 'menu4'}}>menu4</a></li>
</ul>
</section>
Текущая настройка на момент публикации:
DEBUG: -------------------------------
DEBUG: Ember : 1.5.1
DEBUG: Ember Data : 1.0.0-beta.7+canary.b45e23ba
DEBUG: Handlebars : 1.3.0
DEBUG: jQuery : 2.1.1
DEBUG: -------------------------------
Привет Крис, я только что просмотрел ваш код и смог определить gotchas
Ваш маршрут по страницам терминов является legal/tou
. Когда вы нажимаете меню навигации со страницы условий, действие вызывается с помощью маршрутов legal/tou => application
(child => parent hierarchy). Следовательно, Nothing handled in the action goToAnchor
было брошено. Итак, первый шаг - переместить логику goToAnchor
из маршрута index
маршрут application
.
Во-вторых, в действии goToAnchor
вы пытаетесь запросить DOM до того, как шаблон будет обработан. Следовательно, он взрывается. Вам нужно запросить DOM после визуализации шаблона. Вы должны использовать очередь afterRender
для Ember RunLoop. Чтобы узнать больше о Ember Runloops, обратитесь к документам здесь
//routes/application.js
export default Ember.Route.extend({
actions: {
goToAnchor: function(route,anchor) {
var $elem, $scrollTo;
this.transitionTo(route).then(function() {
Em.run.schedule('afterRender', function(){
$elem = $('#' + anchor);
$('html,body').animate({
scrollTop: $elem.offset().top-15
}, 500);
});
});
}
}
});