在javascript/主干中预加/追加哈希键
我有点晕眩。 这对backbone.js来说不是一般性的,但它肯定会给我带来让backbone.Router.routes正常工作的问题: 问题是: 我的js中有一堆硬编码路由,它们遵循一种键值对散列模式,如:在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
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
}
);