2013-05-22 39 views
1

對於某些人來說,這看起來很平凡,但我有一個應用程序執行搜索並使用包含搜索詞的散列更新瀏覽器歷史記錄。瞭解具有查詢參數的Backone js路由

routes: { 
"": "search", 
"search/:query": "searchSetup" 
}, 

根據我對標籤的理解,有效的標籤不應包含空格。每個人如何在用戶搜索例如視頻遊戲。 似乎當我搜索上面的術語導航事件被激發兩次 我的正則表達式目前是糟糕的。

RT.App.searchRouter = Backbone.Router.extend({ 
    initialize: function() { 
     RT.App.vent.on("change:hash", function(searchTerm) { 
      console.log("chnaging hash") 
      this.navigate('search/'+searchTerm); 
     }, this); 
    }, 
    routes: { 
     "": "search", 
     "search/:query": "searchSetup" 
    }, 
    createView: function() { 
     //has view already been instatiated? 
     if(!$("#forms-demo").length) { 
      new RT.App.views.AdvancedSearchView({ 
       el: '#ui-search', 
       model: new RT.App.models.AdvancedSearch() 
      }); 

     } 

    }, 
    search: function() { 
     //clear any previous search if any 
     this.createView(); 
    }, 
    searchSetup: function(query) { 
     this.createView(); 
     var $searchinputEl = $("#search-term"),  

     //check if storage entry exists and if it matches the query entered 
      storedSearchTerm = amplify.store('search'); 
     if((!_.isUndefined(storedSearchTerm) && !_.isUndefined(query)) && (storedSearchTerm.term === unescape(query))) { 

      //retrieve storage and perform search based on preferences 
      RT.App.searchCategoryOptions.attributes = storedSearchTerm.sections; 

      //each filter view options should now set the correct options 
      RT.App.vent.trigger("change:options"); 

      //add search query to search input 
      $searchinputEl.val(storedSearchTerm.term); 

      //trigger search 

      $(".trigger-search").trigger("click"); 
     } 
    } 
}); 
$(function(){ 

    // Instantiate the router 
    var searchRouter = new RT.App.searchRouter(); 
    if(Backbone.History.started) { 
     Backbone.history.stop(); 
    } 
    Backbone.history.start(); 
}); 

回答

0

您可以處理空格。只要確保先編碼您的搜索條件。

this.navigate('search/'+ encodeURIComponent(searchTerm));