在Ember和Ember Data中检查相关对象为空

时间:2014-09-29 16:13:14

标签: javascript ember.js ember-data

当相关数据以0-1关系序列化时,一切正常。

"lesson": {
  "id": 1,
  "title": "foo",
  "user_completion": {
    "id": 1,
    "percent": 30
  },
  "is_available": true
}

但是,当尚未创建相关模型时,Web服务将为该关系返回null。

"lesson": {
  "id": 1,
  "title": "foo",
  "user_completion": null,
  "is_available": false
}

看来,当使用此数据实例化ember模型时,user_completion将变为 PromiseObject

  1. 当没有相关的一对一或一条记录时,我的网络服务是否应为此关系返回null?
  2. Ember Data是否已将promise对象放在模型的此属性上,即使它永远无法解析为什么?我错过了一些重要的东西吗?
  3. 在需要检查相关数据是否存在的情况下,我应该怎么做,如下例所示?

    model.filter(function(item) {
      return item.get('is_available') || item.get('user_completion') !== null;
    });
    

    我真的只需要检查user_completion是否是PromiseObject?这看起来有点奇怪,我觉得我在其他地方犯了错误。

1 个答案:

答案 0 :(得分:5)

经过一番调查后发现,如果你的关系定义为async,那么总是会返回一个承诺,无论你是否内联关系。

更改

user_completion: DS.belongsTo('user_completion', {async: true})

user_completion: DS.belongsTo('user_completion', {async: false})

一切都按预期工作; Ember返回null表示空关系。

对于它的价值,它看起来像async: true may become the default in future