Ember.js当前用户-从控制器访问全局变量
我被一个看似简单的余烬问题难住了。我使用从rails控制器序列化rails当前用户方法,然后使用将当前用户元json提取并设置为全局ember变量 到目前为止一切都很好。现在,我可以通过键入App.metaData.current_user从控制台访问当前_用户信息,也可以通过调用特定属性从把手访问当前_用户信息,即:Ember.js当前用户-从控制器访问全局变量,ember.js,ember-data,active-model-serializers,Ember.js,Ember Data,Active Model Serializers,我被一个看似简单的余烬问题难住了。我使用从rails控制器序列化rails当前用户方法,然后使用将当前用户元json提取并设置为全局ember变量 到目前为止一切都很好。现在,我可以通过键入App.metaData.current_user从控制台访问当前_用户信息,也可以通过调用特定属性从把手访问当前_用户信息,即: {{App.metaData.current_user.email}} 该电子邮件属性将显示在模板中。当我试图从ember控制器中访问该全局变量时,问题就出现了。这看起来非常简
{{App.metaData.current_user.email}}
该电子邮件属性将显示在模板中。当我试图从ember控制器中访问该全局变量时,问题就出现了。这看起来非常简单,但我似乎无法从任何ember控制器中访问当前用户。我试过:
currentUserBinding: 'App.metaData.current_user',
currentUser: function() {
return App.metaData.current_user;
}.property(),
Ember.get('App.metaData.current_user')
和其他一些方法,但似乎无法访问它。奇怪的是,我可以通过控制台和把手直接访问当前用户,而不是从余烬控制器。我一定错过了什么明显的东西
非常感谢您的帮助 您可以定义一个变量来表示脚本标记中的用户id。这应该在服务器模板中完成:
<script type="text/javascript">
window.user_id = 1;
</script>
然后,您可以使用ApplicationController#userInfo
中的属性创建模板
<script type="text/x-handlebars">
<h1>App</h1>
{{userInfo.fullName}}
</script>
应用程序
{{userInfo.fullName}
如果需要从路由使用此数据,则可以使用;如果需要从其他控制器访问,则可以使用
(见附件)
请记住,这可能不是所有情况下的最佳解决方案,因为它会在应用程序初始化中添加一个请求,但现在对我来说,它确实起到了作用。在我们的应用程序中,我们的做法与@MilkyWayJoe建议的相同,但我认为您的方法非常有趣。通过JSON传递当前用户是一种非常优雅的方法 我没有做过太多的实验,但从您的示例中可以看出,问题与序列化程序无关。computed属性有问题-您需要指定它依赖于
App.metaData.current\u user
App.ApplicationController = Ember.Controller.extend({
currentUser: function() {
return Ember.get('App.metaData.current_user')
}.property('App.metaData.current_user')
});
这告诉ember,只要
App.metaData.currentUser
发生更改,它就应该重新计算currentUser属性。否则,它将运行一次fx(在ajax返回之前)并缓存响应。在类似的场景中,我创建了一个用户
模型,并将其设置为应用程序控制器
的属性,因此,我可以通过路由中的控制器访问,或通过控制器中的需要访问。然后从服务器序列化一个用户对象,并在应用程序控制器上设置一个currentUser属性,该属性绑定到类似currentUser:App.user.find(0)的内容。是的,请参见下面的示例。我还添加了一个模拟的requests,将来我想找出一种方法,通过json传递当前用户,而不是将其嵌入服务器端模板中,但现在可以了!谢谢你,伙计!太棒了,谢谢你的帮助!现在我两种方法都起作用了。我试图避免在服务器端模板中嵌入javascript,但是这种方法有什么好处吗?我倾向于坚持JSON序列化,现在它可以与正确的计算属性一起工作。我认为两者都有优点/缺点。我们写了我们的应用程序之前,烬数据的元数据支持,所以没有考虑这一方法。嵌入服务器端的一个优点是,您不仅可以嵌入当前用户,还可以嵌入其他模型的数据,这可能比通过api获取JSON性能更好。
<script type="text/x-handlebars">
<h1>App</h1>
{{userInfo.fullName}}
</script>
App.ApplicationController = Ember.Controller.extend({
currentUser: function() {
return Ember.get('App.metaData.current_user')
}.property('App.metaData.current_user')
});