2013-04-23 3 views
4

Я пытаюсь включить bootstrap scrollspy в мое приложение ember.раздел ссылки с ember.js

Для выполнения этой работы scrollspy требуется href="#section1", что явно запутывает маршрутизатор. Это дает мне ошибки JavaScript, такие как Uncaught Error: No route matched the URL 'section1', и ломаю scrollspy, я считаю. Последний элемент всегда выбирается.

Неужели кому-то еще удалось это сделать? Есть ли способ сказать маршрутизатору не беспокоиться об этом представлении?

+2

что [тип url] (http://emberjs.com/guides/routing/specifying-the-location-api/) вы используете? По умолчанию Ember использует hash ('#'), который определенно столкнется с якорями, используемыми scrollspy, как вы уже видели в сообщении об ошибке. – MilkyWayJoe

+0

Я не использую историю api.Мне нужно было бы исследовать, какие браузеры поддерживают его, а какие нет (позже может быть проще. Как вы думаете, было бы лучше возобновить роутер и установить местоположение в none при вводе представления и включить его снова, когда представление удаляется? – Rudi

+0

Возможно, я ошибался, но насколько я знаю, вы не можете изменить их тип url во время выполнения приложения. – MilkyWayJoe

ответ

0

«Это не проблема с ScrollSpy, это проблема с Ember Router». - @ elise-chant

Проблема заключается в том, что в ее ядре Ember полагается на взломать хэш ('#') в URL-адресе и использовать его для своих целей. Там не было поддержки для таких URL-адресов: http://example.com/#/about#faq

@ ответ elise-chant приводит меня к core issue, и теперь я рад сообщить, что с Ember 1.9.0 URL с более чем одним хэшем (' # ').

Jay Phelps при условии исправления и совсем недавно было это, чтобы сказать:


Мы можем видеть, что он [Fix #4098] приземлился в стабильной версии v1.9.0.

У вас пока нет кода, который фактически прокручивает страницу до id = "anchor" для вас. Сделанные изменения позволили сделать этот код . Я поговорил с некоторыми из основных членов о такой реализации и по-прежнему планирую попробовать и добавить ее в ядро, но в тем временем вы можете определенно использовать> = 1.9.0 и добавить свой собственный код в , чтобы сделать это, что должен быть довольно прямо вперед для простых случаев:

Somethine как это, но совершенно непроверенный:

didTransition: function() { 
Ember.run.schedule('afterRender', this, 
function() { 
    if (window.location.hash) { 
     var el = document.getElementById(window.location.hash.substr(1)); 
     if (el) { 
     el.scrollIntoView(); 
     } 
    } 
    }); 
} 

Как я нахожу циклы для работы на этом я буду иметь рабочий пример, но я предлагаю вы пахаете вперед своими силами, если сможете.

Я лично заинтересован в том, чтобы люди попросили и расскажут здесь, как вы идете.

0

Вы должны иметь возможность использовать цель данных вместо href с помощью scrollspy.

data-target="#section1" 
+0

Это не сработало для меня, используя цель данных вместо href ничего не делает – Rudi

+0

Если вы положили jsbin/jsfiddle Я возьму loo k на нем, это было просто предположение, глядя на источник scrollspy. – RyanHirsch

+0

Я создаю один коротко – Rudi

1

Это не проблема с ScrollSpy, это проблема с Ember маршрутизатор http://discuss.emberjs.com/t/handle-incoming-links-with/4839

Возможно, вы можете изолировать этот вопрос, чтобы подтвердить? Проведите тест с обычной старой хэш-ссылкой в ​​Ember.

+0

Что касается якорных ссылок, прыгающих на странице Ember Jay Phelps сказал это 24 сентября 2014 года: «Я хочу, чтобы все было готово, чтобы все, пожалуйста, держите меня подотчетным и жужжайте меня, если у меня нет PR скоро." ref: https://github.com/emberjs/ember.js/issues/4098#issuecomment-56635351 – Evolve