Это типичный случай использования диаграммы состояний, а точнее параллельных состояний.
Если вы еще не знали, SproutCore содержит очень полезную библиотеку под названием SC.Statechart, которая представляет собой способ работы с состоянием приложения гораздо более контролируемым способом, чем использование логических свойств, поскольку он также действует как респондент, а также контроллер.
В этом случае вам понадобится диаграмма состояний, которая в корне имеет два параллельных состояния: одно для работы с состояниями, связанными с аутентификацией, и одно для работы с остальной частью приложения.
MyApp.statechart = SC.Statechart.create({
rootState: SC.State.design({
substatesAreConcurrent: true,
AUTH: SC.State.design({
initialSubstate: 'CHECKAUTH',
CHECKAUTH: SC.State.design({
}),
LOGIN: SC.State.design({
}),
AUTHENTICATING: SC.State.design({
}),
AUTHENTICATED: SC.State.design({
}),
}),
APPMAIN: SC.State.design({
})
})
});
Как это должно работать: когда ваше приложение запускается, оно сразу переходит в два состояния, одно из которых является состоянием APPMAIN, которое относится к самому приложению. Другое — это состояние AUTH, которое немедленно переходит в начальное подсостояние CHECKAUTH, которое проверяет, есть ли у пользователя действительный сеанс. Если нет, это состояние должно перейти в состояние LOGIN, которое отвечает за отображение экрана входа в систему. Когда пользователь затем выполняет вход в систему, состояние LOGIN переходит в состояние AUTHENTICATING, которое выполняет проверку сервера. Если эта попытка недействительна или неверна, состояние AUTHENTICATING должно перейти в LOGIN, в противном случае — в AUTHENTICATED.
Чтобы ответить на исходный вопрос, этот вопрос основан на следующем: если вам нужен где-то таймер, который регулярно проверяет, действительна ли аутентификация, он должен находиться в состоянии AUTHENTICATED. Если это не удастся, вы можете немедленно перейти в состояние LOGIN, чтобы отобразить экран входа в систему.
Подобная диаграмма состояний не позволяет пользователю перезагружать или выходить из приложения, чтобы снова войти в систему, и, возможно, в результате потерять данные. Короче говоря, это значительно улучшает пользовательский опыт.
person
mauritslamers
schedule
12.05.2015