我設置一個狀態管理器用於跟蹤用戶的登錄狀態,基於這個答案在這裏:Change Navbar based on login state灰燼出口兩次改變狀態後,不會呈現
不過,我想它帶到下一步,不僅有根據狀態的導航欄更新,而且主要模板本身。我已經完成了這個工作,所以當你點擊登錄按鈕時,它會顯示'歡迎你現在登錄消息'。但是,如果您註銷並嘗試再次登錄,它只會顯示一個空白屏幕,就好像它不正確地重新渲染索引路線一樣。這是我的問題JSFiddle。注意當你點擊登錄/註銷然後再次登錄時會發生什麼。 「歡迎」消息不顯示。
這裏是我的索引模板:
{{render navbar}}
{{authState}}
{{#if isAuthenticated}}
{{outlet}}
{{else}}
{{render login}}
{{/if}}
我可以看到「authState」是正確的,但「出口」沒有呈現第二次我登錄...
這裏是完整的jsfiddle:
http://jsfiddle.net/Benmonro/HmJyu/1/
澄清
@ham要求澄清,所以這裏有雲:
我想在這裏完成的主要問題是,當一個國家經理變動的isAuthenticated
那麼什麼是{{outlet}}
目前呈現的狀態應該被交換出去在{{render login}}
中呈現的內容可能真的是任何模板。重點是{{outlet}}
將顯示和隱藏瓦特/狀態變化...
實際上,這個解決方案仍然不能解決真正的問題,即{{outlet}}不會呈現兩次。我通過將'index'腳本重命名爲'welcome'來更新小提琴,並且您可以看到它仍顯示相同的行爲: http://jsfiddle.net/Benmonro/HmJyu/3/ 此外,如果我可以' t命名第二個腳本'索引'如何將該腳本定義爲路由中的默認路徑? – Ben 2013-05-01 04:08:10
@你在DOM中仍然有一個以上的id,例如登錄...另一件事是你的狀態管理器與outlet渲染無關 - 它在你的navbar控制器中。我猜你可以刪除模板中的狀態管理員代碼和「if」,當你點擊登錄右上角時,你會看到歡迎信息。第二個問題:是的,你不能把模板稱爲索引是根據Ember命名約定。另一個更好的做法是將每個模板保存在單獨的文件中,而不是愚蠢的腳本標記,您可以註冊外部文件,如Ember.TEMPLATES [name] = Ember.Handlebars.compile(); – 2013-05-01 05:05:31
感謝提示,我對Ember有點小事,我看到了我想切換到的ember-tools,但沒有時間。我剛剛離開指南和例子,肯定要利用Ember.TEMPLATES。 儘管如此,我通過並刪除了任何重複的ID,但問題仍然存在。我在這裏再次更新了JSFiddle。 http://jsfiddle.net/Benmonro/HmJyu/4/我希望以這種方式使插座工作的原因是,如果您在某個路線上註銷(例如,說/ posts/1/edit)那麼當你登錄時,你就會回到那裏。 – Ben 2013-05-01 06:43:51