只是想知道是否还有一个参数在sammy js路由中指定为可选参数。
我见过你可以使用的地方
route/:foo/?:bar
这将欺骗sammy认为bar是可选的。但是,如果您在没有bar
的情况下查询您的参数,则它将等于网址的最后一个字符,例如
'#/route/test' => {foo: 'test', bar: 't'}
和
'/route/test/chicken' => {foo: 'test', bar: 'chicken' }
但是如果在两种情况下都填充了条形码,则无法检查它是否已被提供。
有关此的任何提示吗?
答案 0 :(得分:12)
this.get(/\#\/route\/(.*)\/(.*)/, function (context) {
var result = this.params['splat'];
});
缺点是当省略可选参数时,您需要在URL末尾使用反斜杠。
splat对象是JavaScript匹配方法的实际结果,是数组。
'#/route/test/' => {result[0]: 'test', result[1]: ''}
'#/route/test/chicken' => {result[0]: 'test', result[1]: 'chicken'}
答案 1 :(得分: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'}
答案 2 :(得分:0)
this.get('#/product/(:id)?', function(context) {
var id = this.params['id'];
context.app.swap('');
context.render('templates/product.template', {base_url:base_url})
.appendTo(context.$element()).then(function () {loadProduct();});
});

答案 3 :(得分:0)
这仍然是一个旧帖子,如果有人正在寻找这个帖子
另一种解决方案是定义两个映射到同一功能的路由:
this.get('#route/:foo', module.foo_handler)
this.get('#route/:foo/:bar', module.foo_handler)
然后在foo_handler中检查typeof(this.params.bar)是否未定义,否则,如果已定义,则使用带有bar参数的路由并已指定bar