2013-11-26 24 views
0

如果model不是空的,我該如何製作一個(雙向)屬性model.someProperty的別名,否則是default.someProperty的別名?目前,我在{{#if model}}中包裝了<select>的兩個版本,一個綁定到模型,另一個綁定到默認值,但我想從模板中刪除邏輯。此外,在某些情況下,在select交換之前,集合觸發,導致錯誤,因爲模型爲空。如何在模型設置時將屬性設置爲model.attr的別名,否則設置爲default.attr?

設置模型時,新模型應該將someProperty設置爲default.someProperty。目前,我做到這一點:

modelChanged: function(){ 
    if(default && default.get('someProperty')){ 
    this.set('model.someProperty', default.get('someProperty')); 
    } 
}.observes('model') 

,我也想知道這是否是做到這一點的最佳方式

+0

我不知道這是可能的,用幾行。我在那個小提琴中爲這個做了一個計算宏,http://jsfiddle.net/marciojunior/3LD6a/。你怎麼看? –

回答

0

DS.attr()可以採取a default value。這有幫助嗎?

var Post = DS.Model.extend({ 
    title: DS.attr('string', { defaultValue: "Work in progress" }) 
+0

默認需要動態。但是@ marcio-rodrigues-correa-junior的小提琴演示了一種方法,它比我的第一次嘗試更好,這是計算屬性中的一切。我必須檢查自己的方式是否會按照我的方式執行:計算的屬性會被觸發兩次。 –

+0

如果有幫助,defaultValue也可以帶一個函數。通過堅持使用DS.attr,您已經獲得了一個處理getter和setter的Ember.computed屬性。無論如何,祝你好運。 – monocle

0

我不知道這是可能的,只用了幾行。但是,它可以創建一個計算的屬性宏:

var get = Ember.get, set = Ember.set; 

Ember.computed.aliasWithDefaultTo = function(dependentKey, defaultPath) { 
    return Ember.computed(dependentKey, defaultPath, function(key, value) { 
    if (arguments.length > 1) { 
     set(this, dependentKey, value || get(this, defaultPath)); 
     return value; 
    } else { 
     return get(this, dependentKey) || get(this, defaultPath); 
    } 
    }); 
}; 

現場演示http://jsfiddle.net/marciojunior/3LD6a/