Emberjs перейти на якорь из другого вида

0

В настоящее время я использую проект 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: ------------------------------- 
  • 0
    Я не понимаю твою проблему. Простой jsfiddle может помочь
  • 0
    это довольно сложно описать, но у меня есть индексное представление, где работают goToAnchors, однако в других представлениях, как мне сделать ссылку меню обратно на индексное представление?
Показать ещё 7 комментариев
Теги:
ember.js
ember-cli

1 ответ

1
Лучший ответ

Привет Крис, я только что просмотрел ваш код и смог определить gotchas

  1. Ваш маршрут по страницам терминов является legal/tou. Когда вы нажимаете меню навигации со страницы условий, действие вызывается с помощью маршрутов legal/tou => application (child => parent hierarchy). Следовательно, Nothing handled in the action goToAnchor было брошено. Итак, первый шаг - переместить логику goToAnchor из маршрута index маршрут application.

  2. Во-вторых, в действии 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);              
          });
        });
      }
     }
    });
    
  • 0
    это сработало отлично, я ценю это. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню