我正在开发一个相当大的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来解决问题,但并不是非常漂亮。非常感谢更好的解决方案。
答案 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'
)
});