这是我的应用程序架构。
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
会显示。
我的问题:
TweetStore
中的数据,也就是说,当HomeView
显示时,数据开始加载。但即使是show
事件也会被触发
面板仍然隐藏。我应该抓住什么事。LoginView
隐藏和HomeView
显示。我应该在哪个场合检查这个?答案 0 :(得分:1)
Q值。 1)您应该听 painted()
事件。
每当此组件实际变为可见(绘制)时触发 屏幕。当您需要执行“读取”操作时,这非常有用 关于DOM元素,即:计算自然尺寸和定位。
Q值。 2)在initialize()
事件上发送用户认证的ajax请求。
初始化组件时触发
答案 1 :(得分:0)
- 第一个问题:
painted
事件似乎很好,但实际上,根据我的经验,它在当前版本的Sencha Touch 2中非常充满了错误。不要依赖它的存在和文档。
根据您所描述的内容,很明显您希望在特定事件(授权)之后加载您的商店,那么如何在此之后触发自定义事件?例如:
loginForm.fireEvent('authenticated', this)
(或您需要的任何额外参数)
然后在您的控制器中,只需在authenticated
视图上收听事件loginForm
。
- 第二个问题:
正如您所说,您希望在应用程序启动后立即运行某些进程。因此,放置代码的正确位置在launch()
的{{1}}函数中。简单。