簡體   English   中英

Sammy.js用&,?閱讀路線

[英]Sammy.js read route with &,?

需要路線看起來像

#/routeName/?param1=aaaa&param2=bbb

加入了薩米

#/routeName/:param1/:param2

#/routeName/?:param1&:param2

它們都不起作用

我一直在Sammy.js中查看查詢參數,並發現(盡管API文檔中沒有提到),Sammy確實支持查詢參數。 它只是添加它在路由中找到的任何查詢參數到路由的Sammy.EventContext.params數組。 如果您的路線結構如下:

Sammy(function() {
    this.get("#/routeName/", function(context) {
        alert("{'param1': '" + context.params.param1 + "', 'param2': '" + context.params.param2 + "'}");
    });
});

你會發現,如果你去路由“#/ routeName /”你會得到“{'param1':undefined,'param2':undefined}”,但如果你去“#/ routeName /?param1 = aaaa&param2 = bbb“,你會得到”{'param1':'aaaa','param2':'bbb'}“。 這允許您以許多REST API開發人員熟悉的方式處理可選參數。


至於為什么你的其他兩條路線不起作用:

#/routeName/:param1/:param2

已命名,必需參數,需要至少一個非/(正斜杠)字符才能匹配路線。 至少,您必須沿着“#/ runRoute / a / b”的路線前往,以便觸發該路線的運行。 如果不提供正則表達式來代替命名參數,您將無法輕松獲得所需的效果。

#/routeName/?:param1&:param2

由於'?',尾隨/后#/ routeName /是可選的 作為Sammy路線中的特殊字符,表示前一個字符或表達式(可以使用括號定義)是可選的。 您可能使用此路由匹配'#/ routeName&b'以及#/ routeName / e&b',在兩種情況下param1都設置為'e',在兩種情況下param2都設置為'b'。 由於Sammy中的查詢參數規則,您不能輕易地定義'?' 在路由中,但您可以使用URL轉義表單'%3F'。


希望這能回答你的問題,我看到了這個問題,最近一直在研究類似的問題。 我不會聲稱自己是Sammy最知識淵博的人,但我們在目前的工作中使用它,這是我們迄今為止能夠弄清楚的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM