钛合金 - 决定在启动时显示哪个视图

时间:2014-09-20 05:48:01

标签: titanium titanium-mobile appcelerator appcelerator-mobile titanium-alloy

我正在构建一个需要登录屏幕的小应用程序。一旦用户登录一次,下次他打开应用程序时他就已经登录了。

在app.js的经典Titanium项目中,我曾经检查用户是否已登录,如果他是打开主窗口,如果没有 - 打开登录窗口。但这是我控制app.js的时候。

在Alloy项目中,我有index.js - 它本身就是一个窗口。如何创建正确的窗口打开的逻辑?

更新

所以,大约48小时进入Alloy tech ......我48小时更聪明。

我遇到的最常见的答案是在索引控制器中执行此逻辑 - 这可能是项目管道中此类逻辑的最合适位置。但我一直认为它确实有一些开销因为我只是初始化索引控制器来做一个简单的逻辑而不是初始化其他一些控制器。

由于Alloy项目首次编译为" Classic"看代码的Titanium代码显示了初始化,每个这样的控制器初始化都有它自己的代码作为控制器的一部分运行。

我确实找到了一个黑客...不知道它是否是最好的事情,但它确实遵循最小的工作流程执行之前(就像在经典项目中一样):

Tha app / alloy.js文件是我们可以添加全局函数和对象的地方。从Appcelerator文档网站:

  

初始化文件app / alloy.js可用于在应用程序生命周期的开头附近执行一些代码。该文件的内容将在加载初始index.js控制器之前执行

在实践中,该文件中的代码将编译为" classic"中的app.js.项目。所以放在那里的任何代码都将放在app.js。

看看"编译" app.js显示执行的最后一个js行是索引控制器的初始化。所以简单地将逻辑放在该文件中将确保它在app.js中执行,并且为了防止索引控制器的初始化,将此行作为alloy.js中的最后一行:

if (false)

这将确保索引初始化永远不会执行。

1 个答案:

答案 0 :(得分:0)

这很简单。您不应在索引文件中定义任何窗口:

//in index.xml keep alloy tag
<Alloy>
</Alloy>

然后定义拖曳控制器(窗口)让我们说登录窗口&amp;欢迎窗口。

//in index.js you can check if the user has logged in or not
var wind=null;
if(logged in ) 
    wind=Alloy.createController('welcome').getView();
else
    wind=Alloy.createController('login').getView();
wind.open();

在登录窗口中,您应该在用户登录后打开欢迎窗口...