EmberJS:如果用户点击了href为'#'的链接,则位置栏(浏览器)中的网址不会发生变化。

时间:2014-04-11 14:04:46

标签: ember.js

我正在使用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/

但我为此创建了一个屏幕上限: ifredirectedtohashthenlocationbarwillnotchange

我错过了什么导致位置栏不变?

1 个答案:

答案 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解决了这个问题,将缺失的更改添加到了稳定版中。

所以这让我:

这确实是固定的,等待1.5.1或最坏的情况,最迟是1.6。

演示:

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