Node.js 如何检索模型数据以在另一个模型中使用?
我正在使用一个通过Sails.js API连接到Rails后端的Ember应用程序,遇到了一个我找不到任何类似示例的问题 我的消息模型有一个Node.js 如何检索模型数据以在另一个模型中使用?,node.js,ember.js,sails.js,Node.js,Ember.js,Sails.js,我正在使用一个通过Sails.js API连接到Rails后端的Ember应用程序,遇到了一个我找不到任何类似示例的问题 我的消息模型有一个sender\u id列,它与我的用户模型中的id列相对应。还有一个配置文件模型(通过User\u id属于用户),其中包含username列,我希望能够通过消息模型以“senderName”(即message.senderName)的形式访问该列。我的模型和路线都已连接,因此我可以访问我需要的所有数据,并且除了senderName功能之外,所有内容都可以在
sender\u id
列,它与我的用户模型中的id
列相对应。还有一个配置文件模型(通过User\u id
属于用户),其中包含username
列,我希望能够通过消息模型以“senderName”(即message.senderName
)的形式访问该列。我的模型和路线都已连接,因此我可以访问我需要的所有数据,并且除了senderName功能之外,所有内容都可以在浏览器中正确显示
计划是通过消息内部的user\u id
(使用sender\u id
)查找Profile对象,然后从那里提取username
字段。我已经能够从我的个人资料查询中收到承诺,但是从那里我不确定如何/是否可以访问实际的username
字段。有没有办法做到这一点,或者我是想把一个方形的钉子塞进一个圆形的孔里
我还尝试通过首先查找用户对象(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>
谢谢你的帮助 如果我答对了问题,您在访问模型中的字段时遇到问题了吗?如果是,请尝试:
profile.get('username')
你真的把这个复杂化了:-)
邮件也属于发件人,为什么要将发件人id定义为一个数字
如果删除senderName
并将sender\u id
属性更改为:
sender: DS.belongsTo('user', { async: true }),
您可以使用
message.get('sender.profile.username')
。我认为您这里的主要问题是,您试图在computed属性中执行异步操作,这是一个禁忌。如果您经常使用它,您可以通过senderName:Ember.computed.alias('sender.profile.username')
,如果您愿意,可以为senderName添加别名。是的,没错。不过,我尝试了profile.get('username')
,结果得到了一个“未捕获错误:断言失败:类型错误:未定义不是函数”错误。我想这可能是因为promise返回了一个数组,但是,profile[0]
返回时没有定义。可能是您的代码在加载“profile”之前就已经运行了—您是否考虑过使用promise?查看Ember.RSVP的内容。它也值得在控制台窗口中进行试验——在模型加载之后,可能会插入一些断点,然后尝试我在那里给您的命令
sender: DS.belongsTo('user', { async: true }),