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

Ben*_*den 3 javascript ember.js ember-data

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

"lesson": {
  "id": 1,
  "title": "foo",
  "user_completion": {
    "id": 1,
    "percent": 30
  },
  "is_available": true
}
Run Code Online (Sandbox Code Playgroud)

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

"lesson": {
  "id": 1,
  "title": "foo",
  "user_completion": null,
  "is_available": false
}
Run Code Online (Sandbox Code Playgroud)

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

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

    model.filter(function(item) {
      return item.get('is_available') || item.get('user_completion') !== null;
    });
    
    Run Code Online (Sandbox Code Playgroud)

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

Ben*_*den 5

经过一番调查后发现,如果你的关系被定义为async,它总会返回一个promise,无论你是否内联关系.

更改

user_completion: DS.belongsTo('user_completion', {async: true})
Run Code Online (Sandbox Code Playgroud)

user_completion: DS.belongsTo('user_completion', {async: false})
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作; Ember回归null空旷的关系.

对于它的价值,它看起来async: true 可能成为未来的默认值.