2012-07-02 40 views
0

我試圖通過一個目錄位置和文件路徑作爲骨幹路由中hashmaps的一部分。這是包含HashMap的網址:在骨幹路由中傳遞url作爲hashmaps?

localhost/index.html#directory-http://localhost/foobar-html/foo.html 

,這就是我的路由映射上述網址:

routes: { 
    'directory-*directoryPath-*filePath': 'render' 
}, 

render: function (directoryPath, filePath) { 
    // I get the entire url in directoryPath variable 
    // http://localhost/foobar-html/foo.html 
    // and filePath is empty. 
} 

什麼是映射這種類型的哈希URL的正確方法嗎?謝謝!

回答

1

fine manual

路由可以包含參數份,:param,匹配斜線之間的單個URL分量;和splat部分*splat,它可以匹配任意數量的URL組件。

你的問題是,一個splat吃東西,所以有兩個splats在一條路線是毫無意義的;您不能使用參數零件:x,因爲它以斜槓停止。

有幾件事你可以做。

  1. 您可以對鏈接中的斜線進行URI編碼並使用參數部分。該URL應該是這樣的:

    #directory-http:%2f%2flocalhost%2ffoobar-html%2ffoo.html 
    

    和路由器會是這樣:

    routes: { 
        'directory-:directoryPath-:filePath': 'render' 
    }, 
    render: function(d, f) { 
        d = decodeURIComponent(d); 
        f = decodeURIComponent(f); 
        //... 
    } 
    

    演示:http://jsfiddle.net/ambiguous/xBnaN/

  2. 您可以添加您的路線使用route正則表達式,這將給你更多的自由來構建模式。例如,像這樣的片段:

    #directory-http://localhost/foobar-html/foo.html 
    

    可以用這樣的路由器處理:

    initialize: function() { 
        this.route(/directory-(.*?)-(.*)/, 'render'); 
    }, 
    render: function(d, f) { 
        //... 
    } 
    

    演示:http://jsfiddle.net/ambiguous/r8MBb/

第二個選項會碰到與你的問題不可避免地會在您的directoryPathfilePath中獲得-;您可以對嵌入的-進行URI編碼,以通過第一個選項獲取它們。

+0

謝謝畝,第二種方式像魅力工作。 – codef0rmer