Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript/主干中预加/追加哈希键_Javascript_Jquery_Model View Controller_Backbone.js - Fatal编程技术网

在javascript/主干中预加/追加哈希键

在javascript/主干中预加/追加哈希键,javascript,jquery,model-view-controller,backbone.js,Javascript,Jquery,Model View Controller,Backbone.js,我有点晕眩。 这对backbone.js来说不是一般性的,但它肯定会给我带来让backbone.Router.routes正常工作的问题: 问题是: 我的js中有一堆硬编码路由,它们遵循一种键值对散列模式,如: whatever.route : {"/url/goes/here":"functionNameHere"} 基本上,这是将url绑定到一个函数名,以便在url更改时调用 我遇到的问题是,我需要在url前面加一个lang/locale字符串,使该字符串看起来像“/en/url/goes

我有点晕眩。 这对backbone.js来说不是一般性的,但它肯定会给我带来让backbone.Router.routes正常工作的问题:

问题是: 我的js中有一堆硬编码路由,它们遵循一种键值对散列模式,如:

whatever.route : {"/url/goes/here":"functionNameHere"}
基本上,这是将url绑定到一个函数名,以便在url更改时调用

我遇到的问题是,我需要在url前面加一个lang/locale字符串,使该字符串看起来像“/en/url/goes/here”

我最初的想法是:

....routes{ lang+"/url/goes/here": "functionNameHere",
...
没有骰子错误 接下来,我尝试使用:

…路由{eval(lang+“/url/goes/here”):“functionNameHere”,

不要再掷骰子了

当然有一种方法可以动态地预先设置哈希键

有人吗

非常感谢

感谢T.J.的解决方案(见下文)

如果有人对Backbone.js特定的方式感兴趣。 我所做的是在我的初始化函数上使用下面建议的解决方案T.J.,如下所示:

漂亮的T.J.克劳德

不确定我是否应该编辑原稿

initialize:  function(params){
        var tmpr = {};
        for(var i in params.routes)
        {
            tmpr[params.lang+i] = params.routes[i];
        }
        this.routes = tmpr;
......

对象文字中
左侧的部分必须是文字(标记[例如,不带引号]或字符串文字[例如,带引号])。它不能是表达式。因此不能在对象文字中执行此操作。相反,必须执行以下操作:

var routes = {};
routes[lang + "/url/goes/here"] = "functionNameHere";
// ...
workspace = new Workspace(
            {
                routes: routes,
                lang : lang
            }
        );
在这里,我们使用括号表示法将属性分配给
routes
对象。使用括号表示法时,可以使用表达式来确定属性名称。这是JavaScript的一个更酷、更鲜为人知的特性,可以使用点表示法和文字属性名称访问属性(
obj.foo
)或括号内的表示法和字符串属性名(
obj[“foo”]
)(事实上,当索引到数组中时就是这样做的-
a[0]=5;
-因为数组)

var routes = {};
routes[lang + "/url/goes/here"] = "functionNameHere";
// ...
workspace = new Workspace(
            {
                routes: routes,
                lang : lang
            }
        );