extjs - Sencha Touch 2默认路线

标签 extjs sencha-touch-2 url-routing

我正在使用路由构建 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/

相关文章:

sencha-touch - 如何正确使用 Sencha NavigationView、深层链接和浏览器历史记录

javascript - 如何在 Sencha Touch 中调用成功函数内的函数?

laravel - Ziggy 路由器默认为查询字符串

javascript - 如何在新选项卡中打开 $state,go()

javascript - 从 ExtJS 6.6 href 链接运行 Controller 功能

javascript - 网格 loadMask 故障。设置 loadMask 目标配置

javascript - 如何让 Container 中的多个组件继承 Container 的计算宽度?

javascript - 如何在 app.js 的 html 页面中隐藏 div

css - 如何使普通按钮在 sencha 中看起来被按下?

javascript - 使用 Sammy.js 取消路由而不影响历史记录