Sammy路由未按预期工作

时间:2016-04-26 00:45:06

标签: asp.net-mvc sammy.js

我在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());
                } 
            });

        });




提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用哈希时,请尝试使用'#/<the_path>'而不是'#<the_path>'定义路线。请参阅文档中的更多示例:http://sammyjs.org/docs/routes 我想这会解决你的问题。

但如果&#39; /&#39; route继续先执行,尝试在最后一个位置定义它。

答案 1 :(得分:1)

此问题证明是代码中另一个区域的问题。在主应用程序viewmodel的init函数中,我调用了#home路由函数。另外,在其他地方我错误地在 ko.applyBindings函数之前调用了这个init函数。切换订单后,一切都运行得更好。