我想在帐户页面上访问当前用户的信息,以便进行编辑。我不知道如何获取当前用户,所以我在我的服务器上设置了一个名为session的路由。
在我的服务器上访问'/ session'会返回一个JSON blob { session: {id: "<guid>"}}
,它是会话中当前用户的ID。
在我的ApplicationRoute
中,我获取了ID,获取了相应的用户模型,然后将模型设置为currentUser
上的ApplicationController
属性。
App.ApplicationRoute = Ember.Route.extend({
setupController: function (controller) {
var self = this;
$.getJSON('/session', function (data) {
if (data && data.session && data.session.id) {
self.set('controller.currentUser', self.store.find('user', data.session.id));
}
});
}
});
我可以在设置currentUser
之后从索引模板中访问属于IndexController
的字符串属性,如下所示:
App.IndexController = Ember.Controller.extend({
needs: ['application'],
currentUser: function () {
return this.get('controllers.application.currentUser');
}.property('controllers.application.currentUser')
});
这很好,但是当我尝试设置多个值Ember.Select时,我收到此错误:
Assertion Failed: Cannot delegate set('roles', []) to the 'content' property of object proxy <DS.PromiseObject:ember435>: its 'content' is undefined.
我做了jsbin
它展示了我正在尝试做的事情。我非常有信心我的错误与ajax请求getJSON
有关,因为我的jsbin示例适用于localstorage。
我应该如何加载当前用户?谢谢!
答案 0 :(得分:0)
问题是因为self.store.find('user', data.session.id)
返回的是承诺而不是记录
如果更改代码以便将currentUser
设置为promise所解析的记录(如下所示),那么它可以正常工作。
App.ApplicationRoute = Ember.Route.extend({
setupController: function (controller) {
var self = this;
$.getJSON('/session', function (data) {
if (data && data.session && data.session.id) {
self.store.find('user', data.session.id).then(function(user){
// set this in the "then"
self.set('controller.currentUser', user);
// you should also be able to change the above line to
// controller.set('currentUser', user);
// because the "controller" is passed in
});
}
});
}
});
非工作箱:http://emberjs.jsbin.com/xufec/1/edit?js,console,output
工作箱:http://emberjs.jsbin.com/xufec/2/edit?js,console,output
注意ApplicationRoute
来自
self.set('controller.currentUser', self.store.find('user', 1));
到
self.store.find('user', 1).then(function(user){
self.set('controller.currentUser', user);
});
作为旁注,您应该能够使用
设置当前用户controller.set('currentUser', user);
因为传入控制器