2016-04-26 80 views
0

我在一個ASP.NET MVC web應用上使用Sammy路由,最初基於SPA web應用的標準MS模板,該應用使用Knockout和Sammy來管理頁面加載/路由。我是Sammy的新手,所以我不太瞭解它,但是我的期望是/#搜索路徑將被執行,即使它是第一個頁面加載,但它看起來好像不是。 「/」路由始終在「冷」頁面加載中執行。Sammy路由不能按預期工作

基本上,如果我在調試模式下運行應用程序,所有的作品都很好。 #home和#search路線按預期工作。但是,如果在調試時,我這個URL粘貼到一個新的選項卡或瀏覽器會話:

http://pr-dev.dav1.net.fmcti.com/#search/101-4155

然後,而非/#搜索路徑代碼執行時,它出現了「/」路線代碼執行。無論網址中是否存在#搜索字詞,此路由是否始終在新會話中執行?這裏是我的主頁視圖模型的打字稿代碼在SPA路由配置:

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

 
     });

預先感謝您的幫助!

回答

1

使用散列時,嘗試使用'#/<the_path>'而不是'#<the_path>'來定義路由。查看文檔中的更多示例:http://sammyjs.org/docs/routes 我認爲這將解決您的問題。

但是,如果繼續執行'/'路線,請嘗試在最後位置定義它。

+0

感謝您的及時建議。事實證明,這不是我的問題,但它確實幫助我更好地理解它。我將分開發布我的最終解決方案。 –

1

這個問題原來是代碼中另一個區域的問題。在主應用視圖模型的init函數中,我調用了#home路由函數。另外,在其他地方我錯誤地在之前調用了這個初始函數的ko.applyBindings函數。一旦我切換訂單,這一切都會更好。