可以使用backbone.js与动态/通配符子域路由?

时间:2012-04-11 17:50:53

标签: javascript ember.js backbone.js url-routing

我正在建立一个系统,它将从网址中提取2个变量(variable1.domain.com/variable2)。

我找不到任何文档显示如何对骨干网中的子域做任何事情。 Default_url只是作为domain.com/api传递。我确实找到了一个叫做CORS(www.enable-cors.org)的东西来支持跨域调用,但它没有提到动态域名。

这样的话甚至可以用骨干吗?如果没有,有没有人知道ember.js或其他骨干系统是否有这个“功能”?

1 个答案:

答案 0 :(得分:2)

这当然是可能的,但不在Backbone默认行为的范围内。假设您的所有子域都使用相同的路由器代码,您可能会破解可能如下所示的解决方案:

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.
  }
});

使用这种方法的一个重要警告:它适用于导航到URL本身的用户,但当您的应用程序需要对navigate执行Router调用时,很快就会变得不稳定。 Backbone将仅导航到URL的哈希部分,因此它不会包含子域。您可能需要启动自定义导航功能,在执行任何其他操作之前设置window.location

显然,这可能不是Backbone非常适合的。我不确定Ember或其他任何东西是否具有此功能,但我会怀疑它。子域名是您网站的不同区域,因此您可能无法正确使用它们。