面板的事件流程在sencha touch 2

时间:2012-05-23 07:04:01

标签: sencha-touch sencha-touch-2

这是我的应用程序架构。

var loginView = Ext.create('Ext.Panel',{
    id: 'LoginView',
    .....
});
var homeView = Ext.create('Ext.TabPanel',{
    id: 'HomeView',
    items: [
           {
                xtype: 'list',
                title: 'Home',
                store: Ext.create('TweetStore'),
                disableSelection: true,
                ....
            },
            {
                title: 'Reply',
                ....
            },
            {
                title: 'DM',
                ....
            }
    ]
});
var mainView = Ext.create('Ext.Panel',{
    id: 'MainView',
    layout: 'card',
    items: [ loginView, mainView ]
});
Ext.define('TweetStore', {
        extend: 'Ext.data.Store',
        config: {
            fields: ...
            pageSize: 25,
            autoLoad: true,
            proxy: {
                type: 'ajax',
                url: '/home',
                pageParam: 'page',
                limitParam: 'count',
                reader: {
                    type: 'json'
                }
            }
        }
    });

MainView中有两个面板。 LoginView是用户输入其用户名和密码的登录页面。授权成功后,第二个面板HomeView会显示。

我的问题:

  1. 我希望在授权后加载TweetStore中的数据,也就是说,当HomeView显示时,数据开始加载。但即使是show事件也会被触发 面板仍然隐藏。我应该抓住什么事。
  2. 当应用程序启动时,我想发送一个ajax请求以检查用户是否登录,如果为true,则LoginView隐藏和HomeView显示。我应该在哪个场合检查这个?

2 个答案:

答案 0 :(得分:1)

Q值。 1)您应该听 painted() 事件。

  

每当此组件实际变为可见(绘制)时触发   屏幕。当您需要执行“读取”操作时,这非常有用   关于DOM元素,即:计算自然尺寸和定位。

Q值。 2)在initialize()事件上发送用户认证的ajax请求。

  

初始化组件时触发

答案 1 :(得分:0)

- 第一个问题:

painted事件似乎很好,但实际上,根据我的经验,它在当前版本的Sencha Touch 2中非常充满了错误。不要依赖它的存在和文档。

根据您所描述的内容,很明显您希望在特定事件(授权)之后加载您的商店,那么如何在此之后触发自定义事件?例如:

loginForm.fireEvent('authenticated', this)(或您需要的任何额外参数)

然后在您的控制器中,只需在authenticated视图上收听事件loginForm

- 第二个问题:

正如您所说,您希望在应用程序启动后立即运行某些进程。因此,放置代码的正确位置在launch()的{​​{1}}函数中。简单。