2013-04-11 4 views
0

Итак, я установил простую систему входа на бэкэнд. Вход & функция выхода из системы работает, но я пытаюсь получить управление государством. У меня есть следующий государственный менеджер:emberjs получение состояния входа в систему

App.loginStateManager = Ember.StateManager.create({ 
    initialState: "unknown", 
    loggedIn: Ember.State.create({}), 
    loggedOut: Ember.State.create({}), 
    unknown: Ember.State.create({ 
    enter: function() { 
     $.ajax({ 
     url: "/loginstate", 
     type: "GET", 
     success: function(data) { 
      if(data == "loggedin") { 
      LocalBookFinder.loginStateManager.transitionTo("loggedIn"); 
      } 
      else { 
      LocalBookFinder.loginStateManager.transitionTo("loggedOut"); 
      } 
     } 
     }); 
    } 
    }) 
}); 

Причина я начать с «неизвестным», как предполагается loggedOut, это потому, что на странице загрузки, я хочу, чтобы запросить сервер, чтобы узнать, если пользователь уже имеет сеанс или нет. Так вот для чего нужна логика ajax. Теперь состояние действительно обновляется соответствующим образом, но поскольку мое представление уже загружено, оно показывает мне зарегистрированные/зарегистрированные ссылки. Есть ли способ связать состояние с шаблоном приложения?

ответ

0

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

{{#if controller.loginState }} 
    Show something 
{{ else }} 
    so not ready loading... 
{{/if}} 

Тогда что-то вроде этого в вашем контроллере.

App.ApplicationController = Ember.Controller.extend({ 
    .... 
    loginState: null 
}); 
+0

Это привело меня к правильному пути. Я полностью отключил использование стат. Я переместил запрос ajax в метод ApplicationController ApplicationRoute. Там я просто вызываю controller.set («loginState», result). И в шаблоне используйте controller.loginState, как вы предложили. Огромное спасибо! – agmcleod

+0

Отличный !! Это больше похоже на то, как я обрабатываю его в одном из моих приложений. –

+0

Мне нравится простота. Диспетчер состояний входа имеет смысл, но обновление этих настроек также немного затруднительно, и, возможно, даже переполняет что-то вроде этого. – agmcleod