1

这是我的应用程序架构。

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'
                }
            }
        }
    });

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

我的问题:

  1. 我希望TweetStore授权后才能加载数据,即HomeView节目时开始加载数据。但是show即使面板仍然隐藏,也会触发事件。我应该捕捉什么事件。
  2. 当应用程序启动时,我想发送一个 ajax 请求来检查用户是否登录,如果为真,则LoginView隐藏和HomeView显示。在什么情况下我应该检查这个?
4

2 回答 2

1

Q. 1) 你应该监听painted()事件。

每当此组件在屏幕上实际可见(绘制)时触发。当您需要对 DOM 元素执行“读取”操作时,这很有用,即:计算自然大小和定位。

initialize()Q. 2) 在事件上发送 ajax 请求进行用户认证。

当组件初始化时触发

于 2012-05-23T08:29:34.737 回答
0

- 第一个问题:

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

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

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

然后在你的控制器中,只听视图authenticated上的事件。loginForm

- 第二个问题:

正如您所说,您希望在应用程序启动后立即运行一些进程。因此,放置代码的正确位置是launch()您的app.js. 很简单。

于 2012-05-23T10:19:33.293 回答