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

Это не мой фактический вариант использования, но я пытаюсь понять концепцию загрузки представления на основе информации, которую другое представление использует с помощью appgyver supersonic framework.

У меня есть 3 страницы, Login.html, MainPage.html и Load.html. У каждого из них есть свой контроллер. Когда приложение открывается, оно сначала переходит на страницу входа. Страница входа отправляет имя пользователя и пароль на мой сервер, который затем возвращает успех или нет. Когда есть успех, приложение переходит на главную страницу. Я бы хотел, чтобы load.html понял, что произошел вход в систему, и начал загружать представление с соответствующим контентом для пользователей. Это так, когда пользователь переходит с главной страницы на страницу загрузки, вся информация уже загружена. Я пытаюсь понять концепцию, как сделать это с помощью сверхзвукового.

1 ответ

Решение

Вы можете использовать методы публикации / подписки между контроллерами.

Проверьте этот документ для некоторых хороших примеров.

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

Один контроллер опубликует:

// gather some user data with successful login like var id = result.user.id
supersonic.data.channel('loginSuccess').publish({ userid: id });

Другой контроллер будет слушать:

supersonic.data.channel('loginSuccess').subscribe( function(data) {
    $scope.id = data.userid;
    // load some data based on user id
});

Вы также можете предварительно загрузить виды. Это может помочь ускорить процесс. Если вы этого не сделаете, вы можете увидеть счетчик между толчками. В structure.coffee в папке config:

preloads: [
  {
    id: "viewIdYouSet"
    location: "nameOfModule#view"
  }
]

Когда вход в систему заканчивается, вы можете найти предварительно загруженное представление и поместить его в стек:

supersonic.ui.views.find("viewIdYouSet").then( function(startedView) {
    supersonic.ui.layers.push(startedView);
});

Надеюсь это поможет.

Другие вопросы по тегам