我有一个应该接受表单输入的操作,抓取当前登录的用户并将它们保存在一起。当我尝试通过以下方式登录用户时:
this.get('controllers.application.user')
我明白了:
Object { content: Getter, 3 more… }
而不是:
{first_name: 'Ashton', X more...}
奇怪的是,获取该对象的属性可以正常工作,例如:
this.get('controllers.application.user.first_name')
返回'Ashton'
。以下是我的代码出现的背景,我很感激您提供的任何帮助。
App.IndexController = Ember.ArrayController.extend({
needs: ['application'],
actions: {
createPost: function () {
var writing = this.get('newContent');
if (!writing.trim()) { return; }
var post = this.store.createRecord('post', {
writing: writing,
author: this.get('controllers.application.user')
});
this.set('newContent', '');
post.save();
}
}
});
答案 0 :(得分:2)
你有什么理由把它放进Ember数据吗?它似乎只是额外的工作几乎没有收获(除非你计划进行大量的用户编辑等)。
从我看到的情况来看,您希望用户随处可访问。我建议使用容器在所有控制器/路由上注册用户。
App.initializer({
name: "appUser",
after:['ember-data'],
initialize: function (container, application) {
// if you want to use the store
var store = container.lookup('store:main'),
user = App.CoolUser.create();
Ember.$.getJSON('api/users/me', function(data) {
for(var key in data.user){
user.set(key, data.user[key]);
}
});
application.register("my:user", user, {instantiate:false});
application.inject("controller", "user", "my:user");
application.inject("route", "user", "my:user");
}
});
然后从任何控制器/路线,您可以使用以下方式直接访问您的用户:
this.user....
http://emberjs.jsbin.com/OxIDiVU/711/edit
如果在发生任何事情之前提取用户很重要,那么一旦发生回调,您将需要deferReadiness
和advanceReadiness
。如果你走这条路线,你也会想要为失败的回调做准备,以免你的应用程序处于停滞状态。 http://emberjs.com/api/classes/Ember.Application.html#toc_routing
App = Ember.Application.create();
App.deferReadiness();
...
Ember.$.getJSON('api/users/me', function(data) {
for(var key in data.user){
user.set(key, data.user[key]);
}
application.advanceReadiness();
});
答案 1 :(得分:2)
您需要指定您想要的内容。试试这个:
this.get('controllers.application.user.content')
执行this.get('controllers.application.user.first_name')
时,Ember知道查看first_name属性的内容,从而获得返回的属性值。