【发布时间】:2014-07-22 11:15:27
【问题描述】:
我正在为我的网络应用程序使用Polymer,我目前在页面链接方面遇到了一些问题。这是我第一个使用所有 ajax/javascript 制作的网站,因此我还没有大量使用 javascript 的历史功能。
无论如何,我在左侧边栏中有一个主菜单。当其中之一被按下时,它应该更改浏览器的 url 并将其放入浏览器的历史记录中。为此,我有以下代码:
Polymer('my-app', {
mainMenu: function(){
this.$.mainPages.selected = this.$.mainMenu.selected;
console.log("Pusing state " + this.$.mainMenu.selected);
history.pushState(null , "title", this.$.mainMenu.selected);
}
});
现在的问题是它被调用了两次,所以如果你点击一次 pushState 会被调用两次。不用说这不好。
我在这里做了一个示例代码:click me。
在此示例代码中,您可以看到在按下几个菜单项后,首先会触发两次事件。我还注意到,当按下返回按钮时,更新页面似乎也会重新触发 pushState。
简而言之,我的第一个担心是按下core-menu 中的元素的事件,mainMenu 函数被调用了两次。 第二个担忧是我在返回时会拒绝状态,我认为这也应该被阻止。
更新代码:
Polymer('my-app', {
ready: function(){
var link = document.URL.split("/");
this.$.mainMenu.selected = link[link.length-1];
console.log("ready with link: "+link[link.length-1]);
window.onpopstate = function(){
var link = document.URL.split("/");
console.log("Calling onpopstate. New link is: "+link[link.length-1]);
this.$.mainMenu.selected = link[link.length-1];
this.$.mainPages.selected = this.$.mainMenu.selected;
}
},
nav: function(){
this.$.drawerPanel.togglePanel();
},
back: function(){
window.history.back();
},
mainMenu: function(){
console.log("Pusing state " + this.$.mainMenu.selected);
this.$.mainPages.selected = this.$.mainMenu.selected;
history.pushState(null , "title", this.$.mainMenu.selected);
}
}
【问题讨论】:
标签: javascript browser-history polymer