2013-01-16 21 views
0

我有了幾個動作灰燼對象:Emberjs對象避免開關罩的方法散列

MyObject = Ember.Object.extend { 
action1: -> 
    console.log "do 1" 

action2: -> 
    console.log "do 2" 
} 

我想打電話取決於一些條件,這些行動之一。簡單的方法是使用ifswitch-case檢查此條件並調用所需條件。但是,我需要像對象內部的哈希方法那樣更具可伸縮性,並通過發送它們的名稱來調用所需的方法,如object.exec('action1')

燼對象是否已具備此功能?

+1

您是否嘗試過類似於:'obj.get('action1')。apply(obj,yourarguments)'? – louiscoquio

+0

我得到一個錯誤:Funtion.prototype.apply:參數列表錯誤類型 – jrabary

+1

'apply'有兩個參數:'this'的值和一個參數數組。如果你想傳遞參數而不把它們放在數組中,你應該使用'call',它將'this'的值作爲第一個參數,所有其他參數直接傳遞給該方法。我建議你閱讀第一個答案:http://goo.gl/5z6yx – louiscoquio

回答

0

這是javascript中動態方法調用方法的快速實現。

var obj = { 
action1 : function(item) { 
    return item; 
}, 
action2 : function(item) { 
    return item; 
}, 

exec:function(name){ 
    if(this[name] ==== 'undefined') return; 
    var args = Array.prototype.slice.call(arguments); 
    return this[name](args.slice(1,args.length)) 
} 
} 

obj.exec('action1','Hello') 
obj.exec('action2','World') 

Should return Hello World