6

Just wondering if there is anyway to specify a parameter as optional in a sammy js route.

I've seen somewhere that you can use

route/:foo/?:bar

and that will trick sammy into thinking that bar is optional. However if you query your params without bar supplied you that it will equal the last character of the url for example

'#/route/test' => {foo: 'test', bar: 't'}

and

'/route/test/chicken' => {foo: 'test', bar: 'chicken' }

but with bar getting populated in both cases there is no way to check if its been supplied.

Any tips on this?

4

4 に答える 4

12

オプションのパラメーターとクエリ文字列に関しては、サミーは実際にボールを落としました。これをうまく機能させる唯一の方法は、正規表現と splat オブジェクトを使用することです。あなたの例では、次のように記述します。

this.get(/\#\/route\/(.*)\/(.*)/, function (context) {
        var result = this.params['splat'];
});

欠点は、オプションのパラメーターを省略した場合、URL の末尾にバックスラッシュが必要になることです。

splat オブジェクトは、JavaScript の match メソッドの実際の結果であり、配列です。

'#/route/test/' => {result[0]: 'test', result[1]: ''}
'#/route/test/chicken' => {result[0]: 'test', result[1]: 'chicken'}
于 2013-04-10T19:00:56.383 に答える
2
this.get("#/:param1(/:param2)?", function (context) {
    var result = this.params['splat'];
});

このアプローチの唯一の問題は、param2 が「/」で始まることですが、これは簡単に削除できます。

'#/go' => {result[0]: 'go', result[1]: ''}
'#/go/here' => {result[0]: 'go', result[1]: '/here'}
于 2013-05-14T20:27:34.097 に答える