Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何检索模型数据以在另一个模型中使用?_Node.js_Ember.js_Sails.js - Fatal编程技术网

Node.js 如何检索模型数据以在另一个模型中使用?

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功能之外,所有内容都可以在

我正在使用一个通过Sails.js API连接到Rails后端的Ember应用程序,遇到了一个我找不到任何类似示例的问题

我的消息模型有一个
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 }),