2012-04-11 4 views
2

Ich baue ein System, das 2 Variablen aus der URL ziehen wird (variable1.domain.com/variable2).möglich, backbone.js mit Dynamic/Wildcard-Subdomain-Routing zu verwenden?

Ich kann keine Dokumentation finden, die zeigt, wie man etwas mit Subdomains im Backbone macht. Default_url wird nur als domain.com/api übergeben. Ich habe etwas namens CORS (www.enable-cors.org) gefunden, das domänenübergreifende Aufrufe ermöglicht, aber nichts über dynamische Domänen.

Ist so etwas mit Backbone überhaupt möglich? Wenn nicht, weiß jemand, ob ember.js oder andere Backbone-ähnliche Systeme dieses "Feature" haben?

Antwort

2

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.