分析sammy.js中的查询字符串?

时间:2014-04-02 10:35:51

标签: javascript sammy.js

我使用sammy.js,我已经知道如何" cut"这个网址分成几部分:

<a href="#/label/drafts">drafts</a>

经由

  this.get('#/label/:name', function(context) {

              context.$element().append('<h1>' + this.params['name'] + '</h1>'); 
          });

但是我该如何剪切此补充网址?

<a href="#/label/drafts?a=1&b=2&c=love#a">How to solve this ? </a>

问题:

我如何提取(sammy&#39; s):

  • a的价值(预期1
  • b的价值(预期2
  • c的值(无哈希)(预期love
  • c&#39;哈希(预期a

jsbin

n.b。我正在寻找sammy&#39; js方式(我显然可以通过纯粹的javascript切割它,但同样,我想要sammy&#39; js方式 - 如果可能的话)

2 个答案:

答案 0 :(得分:2)

实际上,Sammy.js确实支持查询参数,因此您可以在网址中使用当前大多数示例(请参阅my answer here获取示例)。它不支持的是你的URL中的'#',是必要的。它将查询字符串定义为?后跟任意数量的非哈希字符(包括无)。这是因为像'/ index?param = foo #bar'这样的网址是一个有效的网址(按照HTTP标准)分割如下:

  • 路线是'/ index'
  • 查询参数'foo'设置为'bar'
  • location.hash设置为'bar'

如果Sammy在有效查询参数字符集中包含哈希字符,那么它将无法在有效URL上轻松识别哈希。但是,如果您对哈希进行URL编码,则可以在路线中使用它。

所以,总而言之,Sammy可以让你接近你想要的东西,但由于它如何定义查询参数,它无法让你到处都是。

答案 1 :(得分:0)

只需分享我如何为自己解决问题,以便它可以帮助他人。

<a href="/#/Listing/Index/4?listtypeid=SomeId" class="list-group-item">@item.Name</a>

在萨米(Sammy)

   this.get('/#/Listing/Index/:id', function (context) {
       context.app.swap('');
       context.$element().append('<h1>Here are parameters id: ' + this.params['id'] + ' and listingtypeid: ' + this.params['listtypeid'] + '</h1>');
       // OR
       //context.$element().append('<h1>Here are parameters id: ' + this.params.id + ' and listingtypeid: ' + this.params.listtypeid + '</h1>');

   });

如果某些时候listingtypeid可能为null或不存在,则应首先检查代码中的参数。