瞬态和非脏属性,余烬数据

时间:2015-04-07 05:33:41

标签: javascript ember.js ember-data

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

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

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);
    }
});

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

2 个答案:

答案 0 :(得分:3)

原来解决方案非常简单。我需要一个Ember-Data没有跟踪的属性(它没有改变状态,并且在回滚后仍未触及)。

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

答案 1 :(得分:0)

我不知道这是否是最佳方式,但您可以使用计算属性:

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