Appcelerator Titanium — управление кросс-платформенной навигацией с экраном входа в систему

До сих пор при использовании своих приложений я использовал библиотеку управления навигацией, которая у меня есть с тех пор, как я использовал классические проекты 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>

Моя дилемма заключается в том, как сделать вход в систему открытым, если пользователь не вошел в систему. Я подумал о перемещении этого входа в главное окно, и если пользователь не вошел в систему, требуется контроллер входа в систему, который вернет представление, которое будет принимать весь экран и добавьте это представление на экран. Как только пользователь войдет в систему, удалите это представление.

Решение, которое я ищу, не должно влиять на производительность приложения, и я стараюсь не показывать некоторое «мерцание» пользователю, когда он впервые открывает приложение (фоновое изображение входа в систему такое же, как заставку). поэтому пользователь не должен видеть белый фон основного приложения, а затем загрузку входа.

Каков правильный ответ в такой ситуации (даже ценой сохранения моего старого навигационного контроллера, работающего только с кодом)?




Ответы (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» — это ваша логическая переменная для проверки того, вошли вы в систему или нет.

person Nilesh Patel    schedule 01.02.2016