я установка State диспетчера для отслеживания состояния входа пользователя, на основе этого ответа здесь: Change Navbar based on login stateрозетка Ember обязана StateManager не делает после изменения состояния дважды
Однако, я хотел бы взять его следующий шаг и не только обновление навигация в соответствии с состоянием, но и основной шаблон. Я получил эту работу в основном, так что, когда вы нажмете кнопку входа в систему, она покажет вам «приветствую, что вы вошли в систему». Однако, если вы выходите из системы и снова пытаетесь войти в систему, он просто показывает пустой экран, как если бы он неправильно перерисовывал указательный маршрут. Вот JSFiddle с моей проблемой. Обратите внимание, что происходит, когда вы нажимаете на логин/выход из системы, а затем заходите в 2-й раз. сообщение «welcome» не отображается.
Вот мой шаблон индекс:
{{render navbar}}
{{authState}}
{{#if isAuthenticated}}
{{outlet}}
{{else}}
{{render login}}
{{/if}}
Я могу видеть «authState» является правильным, но «на выходе» не отображается 2-й раз, когда я логин ...
Вот полная jsfiddle:
http://jsfiddle.net/Benmonro/HmJyu/1/
РАЗЪЯСНЕНИЕ
@ham попросил разъяснений, так что здесь идет:
Главное, что я пытаюсь достичь здесь в том, что, когда государственный менеджер изменяет состояние isAuthenticated
то, что в настоящее время оказанной в {{outlet}}
должна быть выгружена для того, что отображается в {{render login}}
, который действительно может быть любым шаблоном. Главное, что {{outlet}}
будет отображаться и скрываться с изменением состояния ...
На самом деле это решение по-прежнему не решает реальной проблемы, которая заключается в том, что {{outlet}} не отображается дважды. Я обновил скрипт, переименовав скрипт «index» в «welcome», и вы можете увидеть, что он по-прежнему демонстрирует то же поведение: http://jsfiddle.net/Benmonro/HmJyu/3/ Кроме того, t name, что второй скрипт 'index', как я могу определить этот скрипт как путь по умолчанию в маршруте? – Ben
@ У вас все еще есть более одного идентификатора в DOM, например, для входа в систему ... Другое дело, что ваш man manger не имеет никакого отношения к рендерингу на выходе - его в вашем навигационном контроллере. Я думаю, вы можете удалить код менеджера состояния и 'if' в шаблоне, и когда вы нажмете login в правом верхнем углу, вы увидите приветственное сообщение. Второй вопрос: да, вы не можете иметь шаблоны, называемые индексом, на условные обозначения Ember. Другое дело, чтобы сохранить каждый шаблон в отдельном файле, а не глупые скриптовые теги, вы можете зарегистрировать внешние файлы, такие как Ember.TEMPLATES [name] = Ember.Handlebars.compile(); –
спасибо за советы, я немного нуб с Эмбером, я видел ульбер-инструменты, на которые я бы хотел переключиться, но не успел. Я просто уходил с гидов и примеров, определенно хочу использовать Ember.TEMPLATES. Несмотря на это, я прошел через и удалил все дубликаты идентификаторов, но проблема все еще существует. Здесь я снова обновил JSFiddle. http://jsfiddle.net/Benmonro/HmJyu/4/ Причина, по которой я хотел бы иметь выходную работу таким образом, заключается в том, что если вы выходите на определенный маршрут (например,/posts/1/edit) то, когда вы входите в систему, вы вернетесь туда. – Ben