我有一个应用程序,最初在app.js中加载了大量的视图和控制器,当我用Phonegap打包时,应用程序启动速度太慢。
有没有办法动态加载它们而不在app.js中加载它们而没有收到警告“同步加载...考虑添加...明确作为要求”
以下是代码:
views: [
'UserProfile',
'Record',
'AllOptions',
'Login',
'ForgotPassword',
'Pin',
'Newsletter',
'UserHome',
'Settings',
'About',
'UserCard',
'RecordDetail',
'AboutDetail',
'NewPIN',
'SubjectDetail'
],
controllers: ['MainController', 'LoginController', 'NewsletterController', 'SettingsController', 'AllOptionsController', 'ProfileController', 'UserCardController','RecordController','AboutController', 'SubscriptionsController'],
models: ['New', 'Message', 'SettingsAction','StudentRecord','Faculty','SubjectRecord'],
stores: ['NewsStore', 'MessagesStore', 'SettingsActionsStore','StudentRecordStore', 'FacultysStore', 'StudentSubjectStore'],
答案 0 :(得分:0)
需要在App的控制器部分配置控制器。事实上,在发布期间,每个Controller.init()
函数在<{strong> {/ 1}}
来自http://docs.sencha.com/touch/2.3.1/#!/api/Ext.app.Application:
每个应用程序都可以定义一个启动函数,只要你的所有函数都调用它 应用程序的类已加载,应用程序已准备好启动。 这通常是放置任何应用程序启动逻辑的最佳位置, 通常为您的应用创建主视图结构。
除了Application启动功能外,还有另外两个 您可以放置应用启动逻辑的地方。首先,每个控制器都能够 定义一个init函数,该函数在Application启动函数之前调用。 其次,如果您使用的是设备配置文件,则每个配置文件都可以定义一个 启动函数,在Controller init函数之后调用 但在应用程序启动功能之前。
请注意,只有活动配置文件的启动功能名为--for 例如,如果您为手机和平板电脑定义配置文件,然后启动 平板电脑上的应用程序,只有平板电脑配置文件的启动功能 调用。
控制器#init函数称为Profile#启动函数调用 Application#launch函数叫做Controller#launch函数调用 使用Profiles时,通常会放置大部分启动逻辑 在Profile启动函数中,因为每个Profile都有一个 需要在启动时构建的不同视图集。
但是你可以避免在App视图部分中定义所有视图,如果它们中的任何一个实际上是另一个视图的子视图(仅在使用父视图时才会使用):
视图具有App.launch()
配置,您可以使用它来要求所需的子视图或组件,而控制器具有requires
配置:
所以,假设你有这个依赖树:
views
您可以在联系人控制器中使用表单,列表和详细信息视图,而无需在联系人控制器中使用表单,列表和详细信息视图。
这样做的好处是,如果你第二次停止使用联系人部分,你将从应用程序中删除联系人控制器,子视图将不再包含在你的应用程序代码中。
每次在控制台日志中看到home
|-> contacts
|-> contact form
|-> contact list
|-> contact detail
|-> news
时,都意味着您需要将该组件(如果它是您自定义视图或Sencha框架组件)添加到"Synchronously loading ... consider adding ... explicitly as a require"
在适当的视图中的部分。这样,当您使用Sencha命令为生产部署构建包时,编译脚本只能添加实际使用的组件,并且它将生成更小的包。