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

标签 javascript backbone.js parameters query-string

我想将键值对作为参数传递给 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/

相关文章:

ruby-on-rails - Ajax队列 Backbone js

sql - 在 SSIS 中使用 OLE DB 命令的查询中的多个参数

javascript - 由于 promise 而在状态更改之前发生更新?

javascript - 文本堆叠在自身之上

javascript - Chrome 上获取 z-index 值的差异

javascript - Backbone.js 设置 View 属性

vbscript - JScriptTypeInfo 定义

javascript - Backbone 错误处理

jquery - 如何让我的 JQuery 代码识别 URL 中的参数,然后选择一行代码

MySQL - 从选择内部使用条件