我正在使用路由构建一个 sencha touch 2 应用程序。如果我直接理解,这需要在您的控制器中指定路由,并将您的 app.launch 函数留空(或者至少,不在那里加载视图/调用控制器)。
我的一个控制器指定了 "" 路由,当 url 哈希部分为空 ( http://localhost/
) 时会加载该路由:
Ext.define('SOP.controller.PartyController', {
extend: 'Ext.app.Controller',
config: {
routes: {
"": "showChooseParty"
到目前为止,一切都很好....
但是在这种情况下,如果哈希部分包含一些垃圾(例如http://localhost/#tralala
,当任何控制器中没有指定 tralala 路由时),应用程序只会挂在加载屏幕上:没有调用任何操作,并且启动函数为空。我想要的是当哈希部分与未知路由匹配时加载的路由(哈希部分垃圾可能是应用程序早期版本中的路由,或者 facebook 试图让我高兴地在哈希中提供 accesstoken在重定向中)。
我有一个解决方法,在启动功能中:
launch: function () {
if (!this.getRouter().recognize(window.location.hash.substr(1))) {
window.location.hash = "";
}
},
但是我不喜欢直接指向哈希的代码,它的工作取决于在第一次匹配路由之前调用 launch() ,并且 this.getRouter() 对象是“私有的”并且不应该被使用。
所以我的问题是,提供默认路由的“正确”方式是什么?还是我完全错过了使用路线的意义?