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)