gpt4 book ai didi

javascript - Backbone.js 路由器中的键值对参数处理

转载 作者:数据小太阳 更新时间:2023-10-29 04:10:56 25 4
gpt4 key购买 nike

我想将键值对作为参数传递给 Backbone 路由,并希望在调用映射函数之前将其反序列化为 javascript 对象。

var MyRouter = Backbone.Router.extend({
routes: {
"dashboard?:params" : "show_dashboard"
},
show_dashboard: function(params){
console.log(params);
}
});

当我转到“http://...#dashboard?key1=val1&key2=val2”时,{key1: "val1", key2: "val2"} 应该打印在控制台上。

我目前在每个映射函数中使用 jQuery BBQ 的 $.deparam 方法来获取反序列化对象。如果我可以扩展 Router 并只定义它一次,那么 params 可以在所有映射函数中作为对象访问,那就太好了。什么是干净的方法来做到这一点?这里面有什么陷阱吗??

非常感谢,

马诺

最佳答案

您应该在 Backbone.Router 中重新定义 _extractParameters 函数。然后将调用所有路由器功能,第一个参数是 params 对象。

// Backbone Router with a custom parameter extractor
var Router = Backbone.Router.extend({
routes: {
'dashboard/:country/:city/?:params': 'whereAmIActually',
'dashboard/?:params': 'whereAmI'
},
whereAmIActually: function(params, country, city){
console.log('whereAmIActually');
console.log(arguments);
},
whereAmI: function(params){
console.log('whereAmI');
console.log(arguments);
},
_extractParameters: function(route, fragment) {
var result = route.exec(fragment).slice(1);
result.unshift(deparam(result[result.length-1]));
return result.slice(0,-1);
}
});

// simplified $.deparam analog
var deparam = function(paramString){
var result = {};
if( ! paramString){
return result;
}
$.each(paramString.split('&'), function(index, value){
if(value){
var param = value.split('=');
result[param[0]] = param[1];
}
});
return result;
};

var router = new Router;
Backbone.history.start();

// this call assumes that the url has been changed
Backbone.history.loadUrl('dashboard/?planet=earth&system=solar');
Backbone.history.loadUrl('dashboard/usa/la/?planet=earth&system=solar');

工作演示是 here .

关于javascript - Backbone.js 路由器中的键值对参数处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com