部分链接与ember.js

时间:2013-04-23 08:30:24

标签: twitter-bootstrap ember.js ember-router

我正在尝试将bootstrap scrollspy包含在我的余烬应用中。

scrollspy需要href="#section1"来完成它的工作,这显然让路由器感到困惑。这给了我像Uncaught Error: No route matched the URL 'section1'这样的javascript错误,打破了我相信的卷轴。始终选择最后一个元素。

有没有其他人成功实现这一目标?有没有办法告诉路由器不要担心这个视图?

3 个答案:

答案 0 :(得分:1)

这不是ScrollSpy的问题,这是Ember Router问题http://discuss.emberjs.com/t/handle-incoming-links-with/4839

也许您可以隔离问题以确认?在Ember中使用常规旧哈希链接进行测试。

答案 1 :(得分:0)

您应该能够使用数据目标而不是href with scrollspy。

data-target="#section1"

答案 2 :(得分:0)

  

“这不是ScrollSpy的问题,这是Ember Router的一个问题”。 - @艾丽丝-呗

问题在于它的核心Ember依赖于在网址中黑客攻击哈希('#')并将其用于自己的目的。没有像这样的网址支持 - http://example.com/#/about#faq

@ elise-chant的回复引导我进入core issue,现在我很高兴地报告,从Ember 1.9.0开始,支持带有多个哈希('#')的url。

Jay Phelps提供了解决方案,最近有人这样说:


  

我们可以看到它[Fix #4098]落在稳定的v1.9.0版本中。

     

还没有任何代码可以实际滚动页面   但是,对于你来说,id =“锚”。所做的改变是允许那种   代码发生。我和一些核心成员谈过这个问题   这样的实现,仍然计划尝试将其添加到核心但在   与此同时,你绝对可以使用> = 1.9.0并添加自己的代码   这样做,对于简单的情况应该是相当直接的:

     有些人喜欢这样但是完全未经测试:

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();
       }
     }   
   }); 
 } 
  

当我找到解决这个问题的周期时,我会有一个有效的例子,但如果可以的话,我建议你自己动手。

我个人希望人们尝试一下,然后在这里报告你如何去做。