瞬态和非脏属性,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')
});
事实证明,解决方案非常简单。我需要一个未被 Ember-Data 跟踪的属性(它没有改变状态并且在回滚后保持不变)。
解决方案:声明 "attribute" 而没有 DS.attr
。它实际上是一个普通的 Ember 对象 属性.
我想在我的 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')
});
事实证明,解决方案非常简单。我需要一个未被 Ember-Data 跟踪的属性(它没有改变状态并且在回滚后保持不变)。
解决方案:声明 "attribute" 而没有 DS.attr
。它实际上是一个普通的 Ember 对象 属性.