【问题标题】:Using this.store.filter with the ID of the belongs_to model将 this.store.filter 与 belongs_to 模型的 ID 一起使用
【发布时间】:2015-06-10 23:36:30
【问题描述】:

我正在尝试检索给定帐户的所有布局。

/app/models/account.js

import DS from 'ember-data';

export default DS.Model.extend({
  companyName: DS.attr('string'),
  layouts: DS.hasMany('layout')
});

/app/models/layout.js

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  account: DS.belongsTo('account', { async: true })
});

/app/routes/layouts.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
      layouts: this.store.filter('layout', { account_id: 1 }, function(layout) {
        console.log(layout.get('account').content.id);
        return layout.get('account').content.id === 1;
      })
    });
  }
});

console.log 行正在输出我期望的 ID (1)。在 Ember 检查器中,我可以看到 5 个布局模型,在“属于”下,我可以看到:account : <DS.PromiseObject:ember960>。点击它会弹出content : <batmics@model:account::ember600:1>,然后点击它会弹出属性,包括正确的 ID。

但是在我的模板中layouts 是空的...我不知道为什么。

顺便说一句,layouts: this.store.find('layout', { account_id: 1 }) 有效,但我需要它来使用过滤器,以便它成为一个活动数组。

【问题讨论】:

  • 什么不起作用?不清楚你的问题是什么..
  • 对不起,我已经澄清了问题
  • 我想知道您的问题是否可能是因为 account 关系是 async 并且可能在函数运行时未加载..但这与事实不符控制台记录了正确的信息。如果您将过滤器更改为简单地返回true,删除您所做的检查,这会改变结果吗?你得到了layouts 的完整列表吗?
  • 我确实得到了完整的布局列表
  • 哦..我想我知道它是什么..我会发布答案

标签: ember.js filter belongs-to


【解决方案1】:

Ember Data 使用其所有 ID 作为字符串。

将您的支票更改为 === '1' 应该会为您解决问题。

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
      layouts: this.store.filter('layout', { account_id: 1 }, function(layout) {
        console.log(layout.get('account').content.id);
        return layout.get('account').content.id === '1';
      })
    });
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2012-10-30
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多