【发布时间】:2011-11-14 11:01:35
【问题描述】:
我有点进退两难。 这对于backbone.js 来说并不通用,但它肯定会导致我无法让Backbone.Router.routes 正常工作:
问题: 我的 js 中有一堆硬编码的路由,这些路由遵循键值对哈希模式,例如:
whatever.route : {"/url/goes/here":"functionNameHere"}
基本上它的作用是将一个 url 绑定到一个函数名,以便在 URL 更改时调用。
我遇到的问题是我需要在 url 前面加上一个语言/语言环境字符串,以便字符串看起来像“/en/url/goes/here”
// this will always return "en" or "fr" or aany 2 letter language code
var lang = window.location.pathname.split("/")[1].length ==2?window.location.pathname.split("/")[1]:false;
workspace = new Workspace( //Workspace is basically just a Backbone.router.extend Object
{
// the routes obj is basically a sequence of routes
routes: {
"/": "home",
"/home": "home",
"/terms": "terms",
"/news": "blog",
"/news/:title": "blogpost",
"/about": "about",
"/about/partners": "partners",
"/about/people": "people",
"/values/ethics": "ethics",
"/values/innovation": "innovation",
"/work": "work",
"/work/process": "process",
"/work/awards": "awards",
"/work/:id": "workdetail",
"/contact": "contact",
"/contact/join": "joinus",
"/contact/enquiries": "enquiries"
},
lang : lang
}
);
我最初的想法是:
....routes{ lang+"/url/goes/here": "functionNameHere",
...
没有骰子错误 接下来我尝试使用:
..routes{ 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;
......
【问题讨论】:
标签: javascript jquery model-view-controller backbone.js