У меня небольшая дилемма.Это не является общим для backbone.js, но, безусловно, вызывает у меня проблемы с работой Backbone.Router.routes:
Проблема: у меня есть несколько жестко закодированных маршрутов в моем js, они следуют за парой ключ-значениеПример хеш-функции:
whatever.route : {"/url/goes/here":"functionNameHere"}
В основном это связано с привязкой URL-адреса к имени функции, вызываемой при изменении URL-адреса.
У меня проблема в том, что мне нужно добавитьURL со строкой lang / locale, чтобы строка выглядела как "/ en / url / go / 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",
...
нет ошибок в кости, затем я пытаюсь использовать:
.... маршрутов {eval (lang + "/ url / идет / здесь"): "functionNameHere", ...
без игры в костиеще раз ..
наверняка есть способ динамического добавления хеш-ключа на лету?
Кто-нибудь?
Большое спасибо
РешениеСпасибо TJ (см. Ниже)
Если кто-то заинтересован в этом специфическим способом Backbone.js.Я использовал решение TJ, предложенное ниже, для моей функции инициализации, например так:
Хороший TJCrowder !!
не уверен, стоит ли мне редактировать orig
initialize: function(params){
var tmpr = {};
for(var i in params.routes)
{
tmpr[params.lang+i] = params.routes[i];
}
this.routes = tmpr;
......