我需要我的应用程序在URL看起来像
时执行一个函数domain.com/mobile/#email_confirmed/email@address.com/otherparam
我将此路线添加到我的一个控制器:
'email_confirmed/:email/:first': 'emailConfirmed'
以及此功能:
emailConfirmed: function (email, first)
但是这个函数永远不会被调用......但是如果我改变了这个url:
domain.com/mobile/#email_confirmed/emailaddresscom/otherparam
然后它工作正常。我想问题来自电子邮件地址中的at符号和点。因此,我想知道是否有另一种方式来声明路由,以便它接受电子邮件地址。
答案 0 :(得分:0)
好问题,
要完成此操作,您需要完成一些操作,首先需要对“@”符号进行编码或解析。通过编码到%40或通过传递其他参数来执行此操作。例如/myemail%40gmail/com/first
或/myemail/gmail/com/first
,然后分别创建function(usernamedomain, tlDomain, first)
或function(username, domain, tlDomain, first)
。然后在函数内部解码%40或解析地址。
我能看到你解决这个问题的另一种方法是完全绕过路由系统。而不是创建一个链接供您的用户交互创建一个Sencha组件,它将触发您可以监听的事件(列表,按钮等..),然后在您的控制器内,您可以使用该控制器中的函数内的数据或使用this.getApplication().getController('SomeOtherController').handleEmail(email, first);
我没有尝试过,但是使用最后一个选项,您根本不需要对网址进行编码。
再次,好问题。如果还有其他一些细节,请告诉我,
祝你好运,布拉德答案 1 :(得分:0)
我想出的解决方案是设置这样的路线:
'email_confirmed/.*': 'emailConfirmed'
然后我在emailConfirmed中检索这样的参数:
var hash = window.location.hash.split('/');
hash.shift();
// hash[0] => email
// hash[1] => first