我正在使用路由构建 sencha touch 2 应用程序。如果我直接理解,这需要在 Controller 中指定路由,并将 app.launch 函数留空(或者至少不加载 View /调用 Controller )。
我的一个 Controller 指定了“”路由,当 url 哈希部分为空时加载该路由 (http://localhost/
):
Ext.define('SOP.controller.PartyController', {
extend: 'Ext.app.Controller',
config: {
routes: {
"": "showChooseParty"
到目前为止一切顺利......
但是在这种情况下,如果哈希部分包含一些垃圾(例如 http://localhost/#tralala
,当任何 Controller 中都没有指定 tralala 路由时),应用程序就会挂起在加载屏幕上:没有调用任何操作,并且启动函数为空。我想要的是当哈希部分与任何已知路由匹配时加载的路由(哈希部分垃圾可能是应用程序的早期版本中的路由,或者Facebook试图让我高兴地在哈希中提供accesstoken在重定向中)。
我有一个解决方法,在启动功能中:
launch: function () {
if (!this.getRouter().recognize(window.location.hash.substr(1))) {
window.location.hash = "";
}
},
但是我不喜欢直接指向哈希的代码,它的工作依赖于在第一次匹配路由之前调用 launch() ,而 this.getRouter() 对象是 "private" and not supposed to be used .
所以我的问题是,提供默认路由的“正确”方法是什么?或者我完全错过了使用路线的意义?
最佳答案
在启动函数中检查哈希值后,您可以执行以下操作...
this.getApplication().getHistory().add(Ext.create('Ext.app.Action', {
url : 'home'
}));
现在您可以使用“home”作为默认路由,而不是空哈希。
关于extjs - Sencha Touch 2默认路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043564/