2013-04-11 44 views
0

因此,我已经在后端安装了一个简单的登录系统。登录&注销功能的作品,但我试图让状态管理去。我有以下状态经理:emberjs获取登录状态onload

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

您可能可以在应用程序控制器上设置属性,并在应用程序模板中设置条件。这将被自动绑定,以便您可以在应用程序控制器上设置成功函数的属性,并且UI应该相应地更新。

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

然后在你的控制器中这样的东西。

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

这让我走上了正确的道路。我完全删除了statemanager的使用。我将ajax请求移到ApplicationRoute setupController方法中。在那里我简单地调用controller.set(“loginState”,结果)。在模板中,按照你的建议使用controller.loginState。谢谢一堆! – agmcleod 2013-04-12 12:56:41

+0

太棒了!这其实更像我在我的一个应用程序中处理它的方式。 – 2013-04-12 14:11:54

+0

我喜欢简单。一个登录状态管理器是有道理的,但更新这些适当的也有点令人生畏,甚至可能是这样的矫枉过正。 – agmcleod 2013-04-12 14:34:31