[英]EmberJS optional parameter
我正在开发一个相当大的EmberJS应用程序,而我来到了这里,希望能够从任何来源检索URL中的跟踪ID。 我已经研究了Ember.Route.serialize和此处的一些类似问题,但是似乎没有任何答复可以正确解决该问题(即,我无法在我的网站上实现它们)。 例如,仅在转换时调用serialize
-hook,并且要确保读取该参数,您必须明确指定子路由才能使用它。
我想要一条这样的路线:
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 [...]
)...
我想知道以前有人遇到过这个问题。 您如何最好地解决这个问题?
欢迎使用其他解决方案,但是请注意,应该将URL确实提供给合作伙伴,并且跟踪应该在没有其他合作伙伴的情况下进行。
谢谢你的时间。
最好的问候,dimhoLt
PS。 我当前的解决方案使用此URL mysite.com/?trackingId=19#!/about
,它通过在服务器上设置cookie来解决问题,但不是很漂亮。 一个更好的解决方案是极大的赞赏。
Ember.js(1.4.0-beta.2)的Beta / canary版本包括对查询参数的支持。 指南页面可以在这里找到 。
您必须使用Beta版或canary版,并手动启用该功能才能使用它:
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'
)
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.