【问题标题】:Exclude model properties when saving with Ember-Data使用 Ember-Data 保存时排除模型属性
【发布时间】:2015-10-09 22:00:49
【问题描述】:

我有一个具有image 属性的模型。保存图像时,我不想将该属性发布到端点。我在想也许我可以 .set 更改 image 属性旁边的所有内容,然后保存。但保存仍然会发布所有内容。

另外,我的适配器支持 PATCH,因此我可以成功保存模型的某些部分。

我的模型

App.Photo = DS.Model.extend({
  title: attr(),
  description: attr(),
  image: attr(),
  authors: hasMany('author'),
  imageURL: function() {
    return document.location.origin + '/media/' + this.get('image');
  }.property('image'),
  created: attr('date')
});

我的控制器

App.PhotoController = Ember.ArrayController.extend({
  actions: {
    save: function() {
      this.get('model').save().then(function(success) {
        self.transitionToRoute('photos').then(function() {
        });
      });
    }
  }
});

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    我认为自从 Ember 上的 PR 以来,有更好的方法来处理属性的排除。

    import DS from 'ember-data';
    
    export default DS.JSONSerializer.extend({
      attrs: {
        image: {serialize: false}
      }
    });
    

    如果你有多个属性要排除,上面的代码看起来更干净。也可以看看DS.JSONSerializer的文档

    【讨论】:

    【解决方案2】:

    您可以覆盖Serializer 上的serializeAttribute 函数:

    App.PhotoSerializer = DS.DjangoRESTSerializer.extend({
        serializeAttribute: function(record, json, key, attribute) {
            if (attribute.name !== 'image') {
                this._super(record, json, key, attribute);
            }
        }
    });
    

    【讨论】:

    • 这似乎没有产生和结果。我记录的属性没有任何结果。
    • 这应该有效;)我将用另一个建议编辑我的答案
    • PhotoSerializer 返回错误No model was found for '0'。这应该以模型命名,对吗?
    • 您是否尝试过调试和单步调试serialize 函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2015-10-13
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多