瞬态和非脏属性,ember-data

Transient and non-dirty attribute, ember-data

我想在我的 Ember 模型中声明不影响模型 "dirty" 状态的瞬态属性。

目前,我在模型中这样声明它们:

eventId: DS.attr("string", {defaultValue: "", transient: true})

它们在序列化程序中被忽略,因此不会发布到 API :

App.ApplicationSerializer = DS.RESTSerializer.extend({
    serializeAttribute: function(record, json, key, attribute) {
        if (attribute.options.transient) { return; }
        return this._super(record, json, key, attribute);
    }
});

但我还要求这些属性不会改变对象的 "dirty" 状态(用于跟踪和回滚而不触及这些)。

我不知道这是否是最好的方法,但你可以使用计算 属性:

App.Person = DS.Model.extend({
  name: Ember.computed(function(key, value) {
    if (value) {
      this.set('___name', value);
      return value;
    } else {
      return this.get('___name');
    }
  }),
  age: DS.attr('number')
});

然后像平常一样在模板中访问它:

{{input value=model.name}}

警告:您需要触发计算的 属性 来初始设置模型的值,例如:

this.store.push('person', {
  id: 1,
  age: 15,
});
this.store.find('person', 1).then(function(person) {
  person.set('name', 'Kori')
});

奖金:working jsbin

事实证明,解决方案非常简单。我需要一个未被 Ember-Data 跟踪的属性(它没有改变状态并且在回滚后保持不变)。

解决方案:声明 "attribute" 而没有 DS.attr。它实际上是一个普通的 Ember 对象 属性.