从电子邮件链接获取url param

时间:2014-08-01 20:35:11

标签: ember.js

我在电子邮件中有一个用于重置用户密码的链接。此链接将用户带到密码重置模板,其中包含重置令牌的参数:

http://localhost:8000/password-reset?token=asldfasjdfalsdf

我需要在电子邮件链接转换时获取PasswordResetController中的令牌。我尝试过使用queryParams,但没有运气。我尝试了下面的代码,也使用了window.location.href,但问题是在加载控制器之前转换到页面的参数。提前感谢您的帮助。

App.NewPasswordController = Ember.Controller.extend
  queryParams: ['token']
  token: null
  actions:
    submit: ->
      token = @get 'token' # Here lies the culprit.
      password = @get 'password'
      passwordConfirmation = @get 'passwordConfirmation'
      data = JSON.stringify password: password, password_confirmation: passwordConfirmation, token: token
      ic.ajax.request(type: 'PUT', url: 'api/v1/password_resets/update', data: data).then (result)=>
        console.log result
        if result.status == 'ok'
          console.log 'ok'
          # Log user in
        else
          console.log 'Error: ForgotPasswordController#submit'

之前我曾尝试过查询参数,但刚刚在今天的文档中看到,您必须使用其中一个较新的Ember版本才能使用它。我切换到1.7.0-beta.4并且查询params现在工作得很好。

App.NewPasswordController = Ember.Controller.extend
  queryParams: ['token']
  token: null
  actions:
    submit: ->
      token = @get 'token'

2 个答案:

答案 0 :(得分:1)

您可以使用Query Params执行此操作。您需要使用如下功能标志激活该功能:

Ember.FEATURES['query-params-new'] = true;

然后在您的控制器中,执行:

App.NewPasswordController= Ember.ObjectController.extend({
  queryParams: ['token'],
  token: null
});

然后您可以正常获取令牌属性。

你需要一个更新版本的Ember.js来实现这一点,比如1.6。

答案 1 :(得分:1)

如果您不想在Ember的beta版本中使用功能标记来激活查询参数,则可以在应用程序初始化之前捕获查询字符串。 这非常hacky 但允许您捕获要在Ember应用中使用的令牌。在Em.Application.create()

之前放置以下内容
window.queryStr = (function(name) {
  var urlSplit = window.location.href.split('?');

  return urlSplit.length > 1 ? urlSplit[1] : null;
})();

然后您可以在您的Ember应用中访问window.queryStr

不言而喻,一旦Query Params处于Ember的稳定版本中,您觉得使用起来就应该使用Ember的核心查询参数功能而不是上述方法。