【发布时间】:2015-03-12 16:44:23
【问题描述】:
我正在使用一个通过 Sails.js API 连接到 Rails 后端的 Ember 应用程序,遇到了一个我找不到任何类似示例的问题。
我的 Messages 模型有一个 sender_id 列,它对应于我的 Users 模型中的 id 列。还有一个 Profile 模型(通过 user_id 属于 User),其中包含 username 列,这是我希望能够通过 Messages 模型作为“senderName”访问的(即message.senderName) .我的模型和路线都已连接,因此我可以访问我需要的所有数据,并且除了我的 senderName 函数之外的所有内容都在浏览器中正确显示。
计划是通过 Messages 内部的 user_id(使用 sender_id)查找 Profile 对象,然后从那里拉出 username 字段。我已经能够从我的 Profile 查询中收到 Promises,但是我不确定如何/是否可以访问实际的 username 字段。有没有办法做到这一点,还是我想把一个方形钉子装进一个圆孔里?
我还尝试通过首先查找 User 对象(this.store.find('user') 等)并使用我的 Rails 关联来访问 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]…}
感谢您的帮助!
【问题讨论】: