2015-04-07 53 views
1

我想在我的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

原來這個解決方案非常簡單。我需要一個沒有被Ember-Data跟蹤的屬性(它不會改變狀態,並且在回滾後保持不變)。

解決方案:聲明「屬性」,不含DS.attr。它實際上是一個普通的Ember對象屬性。

+0

不太確定我明白。那麼我該用什麼來代替 'mapaLat:DS.attr()' – klavado

+1

就像你對每個其他Ember「對象」所做的一樣,這意味着你會使用'mapaLat:「你的價值,就像那樣簡單」 '沒有包裝在'DS.attr()'中 –

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

Bonu s:working jsbin

+0

在jsbin中,更改年齡並重寫原始「15」後的狀態仍然很髒。但它可能適用於我的實際使用情況,今晚將嘗試這個! –

+0

是的,我也注意到了。如果屬性恢復到其原始狀態,可能Ember數據不夠智能以轉換回乾淨狀態。 –

+0

或者它可能是因爲它是一個數字,而輸入是一個字符串,燼數據會變得困惑?稍後再測試。 –

相關問題