繁体   English   中英

EmberJS可选参数

[英]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'
  )
});

jsbin示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM