我正在使用通过Sails.js API绑定到Rails后端的Ember应用程序,并遇到了一个我无法找到类似示例的问题。
我的消息模型有一个sender_id
列,与我的用户模型中的id
列相对应。还有一个配置文件模型(属于用户user_id
),其中包含username
列,这是我希望能够通过消息模型访问的列,因为' SENDERNAME' (即message.senderName
)。我的模型和路线都已连接,所以我可以访问我需要的所有数据,除了我的senderName功能外,所有数据都在浏览器中正确显示。
计划是通过消息中的user_id
(使用sender_id
)查找Profile对象,然后从那里提取username
字段。我已经能够从我的个人资料查询中收到Promise,但是从那里我不确定如何/如果我可以访问实际的username
字段。有没有办法做到这一点,或者我是否想要将方形钉固定在圆孔中?
我还尝试通过首先查找User对象(username
等)并使用我的Rails关联this.store.find('user')
来访问user.profile.username
,但这并没有成功。
型号:
App.Message = DS.Model.extend({
sender_id : DS.attr('number'),
content : DS.attr('string'),
senderName: function() {
var id = this.get('sender_id');
var profile = this.store.find('profile', {user_id: id}).then(function() {
console.log(profile);
// What next? profile.username doesn't work
})
}.property('sender_id')
});
App.Profile = DS.Model.extend({
user: DS.belongsTo('user', { async: true }),
username : DS.attr('string'),
user_id : DS.attr('number')
});
App.User = DS.Model.extend({
profile: DS.belongsTo('profile', { async: true }),
email: DS.attr('string'),
name: DS.attr('string')
});
模板:
<script type="text/x-handlebars" data-template-name="messages/index">
<div class="small-12 column">
{{#each message in model}}
<p>From: {{message.senderName}}</p>
<p>Content: {{message.content}}</p>
{{/each}}
</div>
</script>
以下是我在浏览器控制台中收到的承诺示例:
Promise {_id: 93, _label: undefined, _state: undefined, _result: undefined, _subscribers: Array[0]…}
感谢您的帮助!
答案 0 :(得分:0)
如果我的问题正确无误,您是否无法访问模型中的字段?如果是这样,请尝试:
profile.get('username')
答案 1 :(得分:0)
你真的过于复杂了: - )
邮件也属于发件人,为什么将sender_id定义为数字?
如果您删除senderName
并将sender_id
属性更改为:
sender: DS.belongsTo('user', { async: true }),
您可以使用message.get('sender.profile.username')
。我认为你的主要问题是你在计算属性中尝试执行异步操作,这是禁忌。如果您愿意,可以通过senderName: Ember.computed.alias('sender.profile.username')
为发件人名称添加别名,如果您最终使用它的话。