Ember.js 余烬数据-仅发送具有值的属性

Ember.js 余烬数据-仅发送具有值的属性,ember.js,ember-data,Ember.js,Ember Data,我有一个具有许多属性和某些关联的模型。它们中的大多数可能是空的,也可能不是空的。 我试图用这个模型作为有效负载进行Ajax调用,某些属性可以为null 我只想发送具有值且不为null的属性,包括关联 可能吗?如果可能的话,请告诉我 export default DS.Model.extend({ name : DS.attr('string'), address : DS.hasMany('address') }); 为了使用REST和语义,您的服务器应该支持http

我有一个具有许多属性和某些关联的模型。它们中的大多数可能是空的,也可能不是空的。 我试图用这个模型作为有效负载进行Ajax调用,某些属性可以为null

我只想发送具有值且不为null的属性,包括关联

可能吗?如果可能的话,请告诉我

export default DS.Model.extend({
      name : DS.attr('string'),
      address : DS.hasMany('address')
 });

为了使用REST和语义,您的服务器应该支持http方法。当Ember知道服务器上已经存在记录时,仅设置了
dirty
标志的属性。如果服务器上不存在记录,则Ember将发送POST而不是补丁。您还可以重写在
JSONAPIAdapter


您在问题中不清楚这是否是新记录而不是更新。

为了将REST与语义结合使用,您的服务器应该支持http方法。当Ember知道服务器上已经存在记录时,仅设置了
dirty
标志的属性。如果服务器上不存在记录,则Ember将发送POST而不是补丁。您还可以重写在
JSONAPIAdapter


您在问题中不清楚这是否是新记录而不是更新。

为此,您应该覆盖序列化程序。如果使用默认的
JSONAPISerializer
,则正确的位置是
serializeAttribute
hook:

export default DS.JSONAPISerializer.extend({
  serializeAttribute(snapshot, json, key) {
    if(snapshot.attr(key) != null) {
      this._super(...arguments);
    }
  }
});
这将适用于属性,而不是关系。但是这基本上是一样的


您还可以编写自己的序列化程序。然后,您只需实现
序列化
钩子,并编写您想要创建JSON的任何代码。

为此,您应该重写序列化程序。如果使用默认的
JSONAPISerializer
,则正确的位置是
serializeAttribute
hook:

export default DS.JSONAPISerializer.extend({
  serializeAttribute(snapshot, json, key) {
    if(snapshot.attr(key) != null) {
      this._super(...arguments);
    }
  }
});
这将适用于属性,而不是关系。但是这基本上是一样的


您还可以编写自己的序列化程序。然后,您只需实现
序列化
钩子,并编写任何您想要创建JSON的代码。

您如何进行Ajax调用?我只是在执行model.save()和使用JSONAPIAdapter。您如何进行Ajax调用?我只是在执行model.save()和使用JSONAPIAdapter。对此我非常抱歉。这是一张新唱片。我对补丁没有问题,因为补丁很好用。在post期间,即使是空值也会消失。你认为哪一个更好?要在ui或服务器中处理此问题?如果是UI,我该怎么做?methodForRequest当前已禁用。哦,好的。还有其他方法可以实现这一点吗?
methodForRequest
仍在2.14 API中:另外,@kumkanillam,在您提供的链接中没有提到
methodForRequest
。@SteveH。该方法在中引入,代码用特性标志
ds-enhanced-ajax
包装,它被禁用并从beta版中删除。但这并没有反映在API文档中。如果我错了,请纠正我。我真的很抱歉。这是一张新唱片。我对补丁没有问题,因为补丁很好用。在post期间,即使是空值也会消失。你认为哪一个更好?要在ui或服务器中处理此问题?如果是UI,我该怎么做?methodForRequest当前已禁用。哦,好的。还有其他方法可以实现这一点吗?
methodForRequest
仍在2.14 API中:另外,@kumkanillam,在您提供的链接中没有提到
methodForRequest
。@SteveH。该方法在中引入,代码用特性标志
ds-enhanced-ajax
包装,它被禁用并从beta版中删除。但这并没有反映在API文档中。如果我错了,请纠正我。