我在ASP.NET MVC Web应用程序上使用Sammy路由,最初基于SPA Web应用程序的标准MS模板,该应用程序使用Knockout和Sammy来管理页面加载/路由。我是Sammy的新手,所以我不太了解它,但我的期望是/#搜索路线会被执行,即使它是第一页加载,但它似乎是不是。 " /"路线总是在寒冷的情况下执行。页面加载。
基本上,如果我在调试模式下运行应用程序,所有工作都完美无缺。 #home和#search路由按预期工作。但是,如果在调试时,我将此URL粘贴到新的选项卡或浏览器会话中:
http://pr-dev.dav1.net.fmcti.com/#search/101-4155
然后,不是/#搜索路径代码执行,而是#34; /"路线代码正在执行。无论URL中存在#search术语,此路由是否始终在新会话上执行?以下是我的主页viewmodel中配置SPA路由的typescript代码:
// configure SPA routing
Sammy(function () {
this.get("#home", () => {
if (app.view() !== self) {
// load page view model
app.view(self);
}
// clear out any search results
self.hideResults();
self.queryTree.refreshDataSource([]);
self.partSummary(new SR.PR.Query.QueryResult());
self.searchBox.setValue("");
});
this.get("/", function() {
this.app.runRoute("get", "#home");
});
this.get("#search/:pn", function() {
if (app.view() !== self) {
app.view(self);
}
const pn = this.params["pn"];
if (pn) {
SR.PR.Query.doPartSearch(self, pn.toUpperCase());
}
});
});

提前感谢您的帮助!
答案 0 :(得分:1)
使用哈希时,请尝试使用'#/<the_path>'
而不是'#<the_path>'
定义路线。请参阅文档中的更多示例:http://sammyjs.org/docs/routes
我想这会解决你的问题。
但如果&#39; /&#39; route继续先执行,尝试在最后一个位置定义它。
答案 1 :(得分:1)
此问题证明是代码中另一个区域的问题。在主应用程序viewmodel的init函数中,我调用了#home路由函数。另外,在其他地方我错误地在 ko.applyBindings函数之前调用了这个init函数。切换订单后,一切都运行得更好。