abe*_*ier 36 backbone.js backbone-routing
将Backbone.Router.navigate设置test为true:
var test = false;
var Router = Backbone.Router.extend({
routes: {
'posts': 'showPosts'
},
showPosts: function () {
test = true;
}
});
router = new Router();
Backbone.history.start();
router.navigate('posts?foo=3', {trigger: true});
assert.ok(test);
Run Code Online (Sandbox Code Playgroud)
例如,默认情况下posts?foo=3片段是否与posts路径匹配,或者我是否必须为此设置另一条路径,例如:posts?*querystring?
谢谢
PS:我知道存在骨干查询参数,但我想知道骨干.
gio*_*_13 66
您需要添加具有该期望参数的另一个路由:
routes: {
'posts?foo=:foo' : 'showPosts',
'posts': 'showPosts'
},
showPosts: function (foo) {
if(typeof foo != 'undefined'){
// foo parameters was passed
}
test = true;
}
Run Code Online (Sandbox Code Playgroud)
更新
您可以定义返回所有查询字符串的常规路由,然后在处理程序中解析它:
routes: {
'posts': 'showPosts',
'posts?*queryString' : 'showPosts'
},
showPosts: function (queryString) {
var params = parseQueryString(queryString);
if(params.foo){
// foo parameters was passed
}
}
...
// and the function that parses the query string can be something like :
function parseQueryString(queryString){
var params = {};
if(queryString){
_.each(
_.map(decodeURI(queryString).split(/&/g),function(el,i){
var aux = el.split('='), o = {};
if(aux.length >= 1){
var val = undefined;
if(aux.length == 2)
val = aux[1];
o[aux[0]] = val;
}
return o;
}),
function(o){
_.extend(params,o);
}
);
}
return params;
}
Run Code Online (Sandbox Code Playgroud)
更新2
这是一个现场演示,可以看到代码的实际运行情况.
rom*_*aia 18
只是为了补充以前的答案,而不是定义具有相同回调的两个路由,例如:
routes: {
'posts': 'showPosts',
'posts?*querystring': 'showPosts'
}
Run Code Online (Sandbox Code Playgroud)
您可以只有一个路由来保持代码清洁:
routes: {
'posts(?*querystring)': 'showPosts'
}
Run Code Online (Sandbox Code Playgroud)
骨干文档:
路由可以包含参数部分,:param,它匹配斜杠之间的单个URL组件; 和splat parts*splat,可以匹配任意数量的URL组件.
如果您仍希望在没有匹配的情况下保留功能,则可以定义两个路由
routes: {
'posts': 'showPosts',
'posts?*querystring': 'showPosts'
}
showPosts: function(querystring) {
if (querystring) {
// here you can parse your querystring, for your case the querystring variable is
// 'foo=3'
}
//here you'll show posts according to the querystring (or lack thereof)
}
Run Code Online (Sandbox Code Playgroud)
这是另一个需要,仍然使用lodash(下划线).删除了_.map,为变量添加了一些冗长,并删除了起始'?' 如果存在:
function parseQueryString(queryString)
{
if (!_.isString(queryString))
return
queryString = queryString.substring( queryString.indexOf('?') + 1 )
var params = {}
var queryParts = decodeURI(queryString).split(/&/g)
_.each(queryParts, function(val)
{
var parts = val.split('=')
if (parts.length >= 1)
{
var val = undefined
if (parts.length == 2)
val = parts[1]
params[parts[0]] = val
}
})
return params
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41235 次 |
| 最近记录: |