2013-04-23 49 views
4

我想包括bootstrap scrollspy在我的燼應用程序。部分鏈接與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使用散列('#'),它肯定會碰到scrollspy使用的錨點,就像您在錯誤信息中已經看到的那樣。 – MilkyWayJoe 2013-04-23 20:55:35

+0

我沒有使用歷史api。我需要研究哪些瀏覽器支持它,哪些不支持(後者可能會更容易一些。你認爲重新打開路由器並在插入視圖時將位置設置爲無,並在視圖中再次打開時會保存被刪除? – Rudi 2013-04-24 07:04:23

+0

我可能會誤解,但據我所知,你不能在應用程序執行期間更改它們的url類型 – MilkyWayJoe 2013-04-24 15:09:05

回答

0

「這不是ScrollSpy的問題,這是Ember路由器的問題」。 - @ elise-chant

問題是,在它的核心Ember依靠在網址中亂碼('#')並將它用於它自己的目的。有沒有這樣的網址的支持 - http://example.com/#/about#faq

@ elise-chant的回覆引導我到core issue,我現在很高興地報告說,從Ember 1.9.0開始,url有多個散列(' #')被支持。

周杰倫菲爾普斯提供的修補程序,最近是這樣說的:


我們可以看到,它[Fix #4098]在穩定v1.9.0版本降落。

目前還沒有將實際滾動頁面到 ID =「錨」爲你,雖然任何代碼。所作的更改是允許發生代碼的那種排序。我曾與一些核心成員談到 這樣的實現,仍然打算嘗試並將其添加到核心,但在 此期間,您絕對可以使用> = 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 2013-04-23 14:20:23

+0

如果你把一個jsbin/jsfiddle我會借一個廁所k就在這,這只是一個猜測來源於Scrollspy的來源。 – RyanHirsch 2013-04-23 14:24:29

+0

我會盡快創建一個 – Rudi 2013-04-23 17:37:33

1

這不是ScrollSpy的問題,它與Ember路由器的問題http://discuss.emberjs.com/t/handle-incoming-links-with/4839

也許你能找出問題來確認?使用Ember中的常規舊散列鏈接進行測試。

+0

關於在Ember頁面內跳轉的錨鏈,Jay Phelps在2014年9月24日這樣說道:「我想完成這個任務,所以如果我沒有PR,每個人都請讓我承擔責任並且糾纏我不久。」 ref:https://github.com/emberjs/ember.js/issues/4098#issuecomment-56635351 – Evolve 2014-10-01 08:42:47