Dies ist sicherlich möglich, aber nicht im Rahmen des Standardverhaltens von Backbone. Unter der Annahme, dass alle Sub-Domains den gleichen Router Code verwenden, können Sie eine Lösung zerhacken, die wie folgt aussehen könnte:
var Router = Backbone.Router.extend({
routes: {
'*variables': 'buildRoute'
},
subdomain: function() {
// This is probably not the prettiest/best way to get the subdomain
return window.location.hostname.split('.')[0];
},
buildRoute: function(variables) {
// `variables` are all your hash variables
// e.g., in the URL http://variable1.domain.com/#variable3=apples&variable4=oranges
// `variables` here would be the string 'variable3=apples&variable4=oranges'
// so you would have to parse that string into a JSON representation, but that's trivial
// Once you have the JSON, you can do something like:
myView.render(this.subdomain(), variablesJSON);
// Your view's `render` function then has the subdomain and all the variables from the URL,
// so it can use them appropriately.
}
});
Ein wichtiger Nachteil bei diesem Ansatz: es für die Nutzer gut funktioniert die Navigation selbst URLs, wird aber schnell werden verwackelt, wenn Ihre Anwendung einen navigate
Aufruf an die Router
durchführen muss. Backbone navigiert nur zum Hash-Teil der URL, sodass keine Subdomain enthalten ist. Sie müssten wahrscheinlich eine benutzerdefinierte Navigationsfunktion aktivieren, die window.location
setzt, bevor Sie etwas anderes tun.
Offensichtlich ist dies wahrscheinlich nicht etwas, für das Backbone gut geeignet ist. Ich bin mir nicht sicher, ob Ember oder irgendetwas anderes diese Funktionalität hat, aber ich würde es bezweifeln. Subdomains sollen bestimmte Bereiche Ihrer Site sein, weshalb Sie sie möglicherweise nicht korrekt verwenden.