根据我上面的评论,我通过捕获 window.hashchange 事件并自己解析 URL 来解决这个问题。这是我真正使用的 Sammy.js 的唯一部分,我没有任何运气来追踪实际问题。希望这会对其他人有所帮助。
我做的第一件事是绑定 hashchange 事件:
$(function () {
$(window).on("hashchange", HandleUrl);
// Call our URL handler to deal with any initial URL given to us.
HandleUrl();
}
这将调用以下 URL 解析器:
function HandleUrl() {
var hash = location.hash;
if (hash.indexOf("#Account") >= 0) {
var splitParts = hash.split("/");
if (splitParts.length >= 2) {
ShowLoadingBox();
ShowAccountDetailFromId(splitParts[1]);
}
} else if (hash.indexOf("#Contact") >= 0) {
var splitParts = hash.split("/");
if (splitParts.length >= 2) {
ShowLoadingBox();
ShowContactDetailFromId(splitParts[1]);
}
} else if (hash.indexOf("#ThingsToDo") >= 0) {
SwitchToPanel("navPanelThingsToDo");
} else if (hash.indexOf("#ThingsIveDone") >= 0) {
SwitchToPanel("navPanelThingsIveDone");
} else if (hash.indexOf("#Reports") >= 0) {
SwitchToPanel("navPanelReports");
} else {
SwitchToPanel("navPanelMyAccounts");
}
}
ShowAccountDetailFromId()类似的功能SwitchToPanel()只是显示和填充(使用 Ajax 对 Web 服务的调用)适当的<div>. 这可能是一种完全幼稚的方法,但它是有效的(即您可以为 URL 添加书签、后退按钮和浏览器历史记录等)。对于未回答的“答案”,我深表歉意。