Титановый сплав — решите, какой вид показывать при запуске

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

В классическом проекте Titanium в app.js я проверял, вошел ли пользователь в систему, было ли у него открыто главное окно, а если нет — открывалось окно входа. но это было, когда я контролировал app.js.

В проекте Alloy у меня есть index.js, который сам по себе является окном. Как мне создать такую ​​логику, чтобы открывалось правильное окно?

ОБНОВЛЕНИЕ

Итак, около 48 часов в технологии Alloy... Я стал на 48 часов умнее.

Самый распространенный ответ, с которым я столкнулся, — реализовать эту логику внутри контроллера индекса, который, вероятно, будет наиболее подходящим местом для такой логики в конвейере проекта. Но я продолжал думать, что у него есть некоторые накладные расходы, поскольку я только инициализирую контроллер индекса для выполнения простой логики, а затем инициализирую какой-то другой контроллер.

Поскольку проект Alloy сначала компилируется в «классический» код Titanium, просмотр кода показывает эту инициализацию, и каждая такая инициализация контроллера имеет свой собственный код для запуска как часть контроллера.

Я нашел хак для этого ... не знаю, лучше ли это сделать, но он следует минимальному рабочему процессу перед выполнением (как в классическом проекте):

Файл app/alloy.js — это место, куда мы можем добавлять глобальные функции и объекты. С веб-сайта документации Appcelerator:

Файл инициализатора app/alloy.js можно использовать для выполнения некоторого кода в начале жизненного цикла приложения. Содержимое этого файла будет выполнено непосредственно перед загрузкой начального контроллера index.js.

На практике код из этого файла компилируется в app.js в «классическом» проекте. поэтому любой код, размещенный там, будет помещен в app.js.

Если взглянуть на «скомпилированный» app.js, видно, что последняя выполненная строка js — это инициализация контроллера индекса. поэтому, просто поместив свою логику в этот файл, вы убедитесь, что она выполняется в app.js, а чтобы предотвратить инициализацию контроллера индекса, поместите эту строку в качестве последней строки вAlloy.js:

if (false)

это гарантирует, что инициализация индекса никогда не будет выполнена.


person developer82    schedule 20.09.2014    source источник


Ответы (1)


Это довольно просто. Вы не должны определять какое-либо окно в вашем индексном файле:

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

а затем определите контроллер буксировки (окна), скажем, окно входа в систему и окно приветствия.

//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();

и в окне входа в систему у вас должно открыться окно приветствия после входа пользователя ...

person LHIOUI    schedule 20.09.2014
comment
похоже, это вероятное решение. просто кажется странным, что нет способа избежать дополнительной загрузки контроллера индекса. - person developer82; 20.09.2014
comment
поскольку индекс является отправной точкой приложения на основе сплава, мы не можем избежать загрузки контроллера индекса... Кстати, когда я работал с appcelerator, я заметил, что окна делают ваше приложение более медленным. Я пришел к выводу, что не следует использовать только одно окно в приложении (индексное окно), внутри этого окна я определил представление (rootView), а затем все остальные созданные мной контроллеры начинаются с тега View, и я загружаю их в rootView понадобится и удалит их (удалить), когда я закончу с ними. это решение выглядит лучшим... - person LHIOUI; 21.09.2014
comment
Я думаю, что иметь одно окно и относиться к каждому экрану как к представлению — это ошибка. Я консультировался с компанией, которая пришла к такому же выводу на устройствах Android с облегченными окнами, что вызвало серьезные ошибки в их логике и приложении. Кроме того, это нарушает нормальное поведение различных устройств (например, управление навигацией в iOS). - person developer82; 21.09.2014