EmberJS可选参数

时间:2014-01-20 14:56:17

标签: javascript ember.js url-routing

我正在开发一个相当大的EmberJS应用程序,我已经来到了我希望能够从任何来源检索URL中的跟踪ID的部分。我已经查看了Ember.Route.serialize,以及几个类似的问题,但是没有回复似乎能正确解决问题(即我无法在我的网站上实现它们)。例如serialize - 钩子仅在转换时被调用,并且为了确保读取参数,您必须明确地指定子路径来获取它。

我想有这样的路线:

mysite.com/#!/ --> start page.
mysite.com/#!/19 --> start page with tracking ID 19.

mysite.com/#!/about --> about page.
mysite.com/#!/about/19 --> about page with tracking ID 19.

目前看来,为了能够从任何URL获取参数,您必须为每条路由手动创建子路由以在路由器中检索它:

App.Router.map({
    this.resource("index", { path: "/" }, function() {
        this.resource("indexTid", { path: ":tId" });
    });

    this.resource("about", { path: "/about" }, function() {
        this.resource("aboutTid", { path: ":tId" });
    });

    [ ... ]

但是,这看起来非常繁琐,而且有很多路线,必须添加单独的路由处理程序(App.AboutTidRoute = Ember.Route.extend [...])......

我以前想过有人遇到过这个问题。你如何最好地解决这个问题?

欢迎使用替代解决方案,但请注意,应该可以向合作伙伴提供网址,并且无需进一步的工作即可跟踪跟踪。

感谢您的时间。

祝你好运, dimhoLt

PS。我当前的解决方案使用此URL mysite.com/?trackingId=19#!/about,它通过在服务器上设置cookie来解决问题,但并不是非常漂亮。非常感谢更好的解决方案。

1 个答案:

答案 0 :(得分:0)

Ember.js(1.4.0-beta.2)的Beta / canary版本包括对查询参数的支持。指南页面可以是found here

您必须使用测试版或加拿大版manually enable the feature才能使用它:

ENV = {FEATURES: {'query-params-new': true}};

该指南包含设置/访问全局可用查询参数的示例:

App = Ember.Application.create({
  LOG_TRANSITIONS: true,
  LOG_VIEW_LOOKUPS: true
});

App.ApplicationController = Ember.Controller.extend({
  queryParams: ['iamglobal'],
  iamglobal: 'foo'
});

App.IndexController = Ember.Controller.extend({
  needs: 'application',
  iamglobal: Ember.computed.alias(
    'controllers.application.iamglobal'
  )
});

jsbin example