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

时间:2015-03-12 16:44:23

标签: node.js ember.js sails.js

我正在使用通过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]…}

感谢您的帮助!

2 个答案:

答案 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')为发件人名称添加别名,如果您最终使用它的话。