0

当 URL 看起来像这样时,我需要我的应用程序执行一个函数

domain.com/mobile/#email_confirmed/email@address.com/otherparam

我将此路由添加到我的控制器之一:

'email_confirmed/:email/:first': 'emailConfirmed'

以及这个功能:

emailConfirmed: function (email, first)

但是该函数永远不会被调用......但是,如果我改变去这个网址:

domain.com/mobile/#email_confirmed/emailaddresscom/otherparam

然后它工作正常。我猜问题出在电子邮件地址中的 at 符号和点上。因此,我想知道是否有另一种声明路由的方式,以便它接受电子邮件地址。

4

2 回答 2

0

好问题,

要做到这一点,您必须跳过几个环节,首先您需要在“@”符号中进行编码或解析。通过编码为 %40 或传递其他参数来执行此操作。例如/myemail%40gmail/com/firstOR /myemail/gmail/com/first,然后分别创建function(usernamedomain, tlDomain, first)OR function(username, domain, tlDomain, first)。然后在函数内部解码 %40 或一起解析地址。

我可以看到您解决此问题的另一种方法包括完全绕过路由系统。与其为您的用户创建一个与之交互的链接,不如创建一个 Sencha 组件,该组件将触发您可以侦听的事件(列表、按钮等),然后在您的控制器内部,您可以使用该控制器中的函数内的数据或使用调用另一个控制器函数this.getApplication().getController('SomeOtherController').handleEmail(email, first);

我没有尝试过,但是使用最后一个选项,您根本不必对您的网址进行编码。

再次,很好的问题。让我知道是否还有其他细节,

祝你好运,布拉德

于 2013-07-22T14:23:47.660 回答
0

我想出的解决方案是这样设置路线:

'email_confirmed/.*': 'emailConfirmed'

然后我在 emailConfirmed 中检索这样的参数:

var hash = window.location.hash.split('/');
hash.shift();
// hash[0] => email
// hash[1] => first
于 2013-07-24T11:34:03.340 回答