sammyjs可选参数

mat*_*lin 6 javascript sammy.js

只是想知道是否还有在sammy js路由中将参数指定为可选参数.

我见过你可以使用的地方

route/:foo/?:bar
Run Code Online (Sandbox Code Playgroud)

这将欺骗sammy认为bar是可选的.但是,如果您在没有bar提供的情况下查询params ,它将等于url的最后一个字符

'#/route/test' => {foo: 'test', bar: 't'}
Run Code Online (Sandbox Code Playgroud)

'/route/test/chicken' => {foo: 'test', bar: 'chicken' }
Run Code Online (Sandbox Code Playgroud)

但是如果在两种情况下都会填充栏,则无法检查是否已提供.

关于这个的任何提示?

小智 12

当谈到可选参数和查询字符串时,Sammy实际上丢了球.我能让它工作得很好的唯一方法是使用正则表达式和splat对象.在你的例子中,你会写:

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

缺点是当省略可选参数时,您需要URL末尾的反斜杠.

splat对象是JavaScript匹配方法的实际结果,是一个数组.

'#/route/test/' => {result[0]: 'test', result[1]: ''}
'#/route/test/chicken' => {result[0]: 'test', result[1]: 'chicken'}
Run Code Online (Sandbox Code Playgroud)