Sencha Touch 2默认路线

时间:2012-06-15 01:31:13

标签: extjs sencha-touch-2 url-routing

我正在使用路线构建一个sencha touch 2应用程序。如果我直接理解,这需要在控制器中指定路由,并将app.launch函数留空(或者至少不加载视图/调用控制器)。

我的一个控制器指定了“”路由,当url hash-part为空(http://localhost/)时会加载该路由:

Ext.define('SOP.controller.PartyController', {
   extend: 'Ext.app.Controller',

    config: {
        routes: {
           "": "showChooseParty"

到目前为止一直很好....

但是在这种情况下,如果散列部分包含一些垃圾(例如http://localhost/#tralala,当任何控制器中没有指定tralala路由时),应用程序只会在加载屏幕上挂起:不会调用任何操作,并且启动功能为空。我想要的是当哈希部分匹配没有已知路由时加载的路由(哈希部分垃圾可能是应用程序的先前版本中的路由,或者facebook试图让我很高兴在哈希中提供accessstoken在重定向)。

我在启动功能中有一个解决方法:

launch: function () {
    if (!this.getRouter().recognize(window.location.hash.substr(1))) {
        window.location.hash = "";
    }
},

但是我不喜欢直接指向哈希的代码,它的工作依赖于在第一次匹配路由之前调用launch(),而this.getRouter()对象是{{3} }。

所以我的问题是,提供默认路由的“正确”方式是什么?或者我完全忽略了使用路线的意义?

2 个答案:

答案 0 :(得分:2)

在启动功能中检查哈希值后,您可以执行以下操作...

this.getApplication().getHistory().add(Ext.create('Ext.app.Action', {
        url : 'home'
    }));

现在您可以使用'home'作为默认路由而不是空哈希。

答案 1 :(得分:0)

我知道已经有一段时间了,我很想知道你可能找到了什么,但我刚刚实现了以下内容:由于Sencha Touch 2路线短路 - 也就是说,一旦找到匹配的路线,Ext停止查找 - 您可以在Error列表的末尾添加controllers控制器,并添加与任何内容匹配的路由:

在我的app.js中我有:

...
controllers: ['Whatever', 'AnotherOne', 'Error'],
...

我在前两个控制器中定义了我需要的routes,然后在app/controller/Error.js我有这个:

...
config: {
  routes: {
    ':foobar': {
      action: 'showNotFound',
      conditions: {
        ':foobar': ".+"
      }
    }
  }
}
...
showNotFound: function(hash) {
  // do whatever you need to
}

所以,任何人去domain.com#whatever / 456会得到Whatever控制器,它可以显示项目#456的视图,但是如果Ext一直到:foobar路由的{{然后他们会点击我的“404”页面。

注意:您的Error(404,Not Found等)路线必须是最后的。这意味着列表中的最后一个控制器,以及配置中的最后一个路由。否则它会在之后的任何事情之前被击中。