0

到现在为止,在使用我的应用程序时,我一直在使用自使用 Titanium 经典项目以来的导航控制库(当我开始编写 Alloy 应用程序时就随身携带了它)。

我查看了员工目录源,并看到了另一种(类似但)有趣的方法来以更“合金”的方式编写跨平台导航。控制器位于index.xml视图和index.js控制器中的逻辑,而应用程序实际上在不同的目录控制器视图中启动。

我不得不说,这种方式比我的遗留代码更干净。

但是我的遗留代码中确实有一件我现在需要构建的应用程序的一部分是登录屏幕。我在代码中所做的是检查用户是否已登录,如果是,我打开的第一个窗口是登录屏幕,否则如果用户已登录,我打开主应用程序。

在此示例中,主窗口设置在视图本身中:

<Alloy>
    <!-- Default App Window -->
    <Require id="index" src="main" platform="android,windows" /> 

    <!-- iOS Window -->
    <NavigationWindow id="nav" platform="ios" class="container">
        <Require src="main" />
    </NavigationWindow>

    <!-- MobileWeb -->
    <Window platform="mobileweb">
    <NavigationGroup id="nav" class="container">
        <Require src="main" />
    </NavigationGroup>
    </Window>
</Alloy>

我的困境是如何在用户未登录的情况下打开登录名。我考虑在主窗口视图中移动该登录名,如果用户未登录,则需要登录控制器,它将返回一个视图整个屏幕并将该视图添加到屏幕。用户登录后,删除该视图。

我正在寻找的解决方案不应该影响应用程序的性能,并且我试图避免在用户第一次打开应用程序时向用户显示一些“闪烁”(登录的背景图像与启动画面)。所以用户不应该看到主应用程序的白色背景,然后登录加载。

在这种情况下正确的答案是什么(即使以我的旧代码导航控制器为代价)?

4

1 回答 1

1

试试这个 index.xml

<Alloy>
 <NavigationWindow id="nav" platform="ios" class="container">

</NavigationWindow>
</Alloy>

index.js

if (isloggedIn) {
    var winMain = Alloy.createController('winMain').getView();
    if(OS_IOS){
       $.nav.window = winMain;
       $.nav.open();
    } else {
      winMain.open();
    }
} else {
   var winLogin = Alloy.createController('winLogin').getView();
    if(OS_IOS){
       $.nav.window = winLogin;
       $.nav.open();
    } else {
      winLogin.open();
    }
}

这里 'isloggedIn' 是用于检查的布尔变量是否已登录。

于 2016-02-01T12:14:22.000 回答