我正在使用Ember 1.5.0和Ember中的典型路由代码。
我使用Router.reopen({location: 'history'});
来使用浏览器的位置API。
在我的hbs模板中,我有两条指向我的路线的链接:
{{#link-to "index"}}Home{{/link-to}}
和{{#link-to "about"}}About{{/link-to}}
如果我点击其中一个,浏览器位置栏中的网址会发生变化。 (没问题)。 但是,如果我点击网址为#
的链接,再次点击{{link-to}}
将不再更改位置栏中的网址。
虽然它仍然呈现正确的模板,但由于位置栏中的URL没有改变,所以它很混乱。
这是一个jsFiddle,虽然这没有显示问题,因为jsFiddle中的位置栏永远不会改变。 http://jsfiddle.net/NQKvy/895/
但我为此创建了一个屏幕上限:
我错过了什么导致位置栏不变?
答案 0 :(得分:1)
这绝对是Ember的一个错误。
单步执行1.4或1.5中的代码,当您单击仅包含Ember.HistoryLocation#setURL
的驱逐舰链接时,您会看到#
被调用。发生这种情况时,请注意this.state === null
。如果状态为null,则所有已发布的ember版本都不会更新URL。创建https://github.com/emberjs/ember.js/pull/4235是为了通过mixonic解决这个问题,虽然看起来他正在为iframe原因修复它,但它是同样的错误。
因为master是使用ES6模块编写的,但是稳定分支还没有(但是),他的代码在一个挑选冲突合并到稳定here期间意外丢失。
https://github.com/emberjs/ember.js/pull/4730解决了这个问题,将缺失的更改添加到了稳定版中。
所以这让我:
演示:
http://static.jayphelps.com/4701-ember-1.4.0/
http://static.jayphelps.com/4701-ember-1.5.0/
http://static.jayphelps.com/4701-ember-1.5.1+pre.5349ffcb/ (fixed)
您可以在此处跟踪此错误的讨论:https://github.com/emberjs/ember.js/issues/4701#issuecomment-40788423