2016-08-17 5 views
0

Ich habe mehrere Objekte und alle von ihnen haben einige Methoden, die die gleichen genannt werden, aber verschiedene Dinge tun.jQuery: benutze dynamisches Objekt basierend auf Variablenwert

Wenn ich auf eine Schaltfläche klicken, möchte ich die init() Methode aufrufen, aber das Objekt unterscheidet sich basierend auf welche Schaltfläche geklickt ich.

Hier ist ein Ausschnitt

$btn.on('click', function(e){ 

    e.preventDefault(); 

    var $trigger = $(this); 
    var objectName = $trigger.data('object'); 

    /* 
    if objectName is 'user', I want to call user.init(), 
    if it's 'product' I want to call product.init() and so on... 
    right now i get an error if I call like his 
    */ 
    objectName.init($trigger); 

}); 

Ist es möglich, ein Objekt wie diese dynamisch zu nennen? Ich weiß, dass es für seine Eigenschaften und Methoden ist, aber ich finde nichts über dieses Problem.

Vielen Dank.

+0

'var ObjektName = JSON.parse ($ trigger.data ('Objekt'));' – Tushar

Antwort

3

Es ist besser Mapping Ihre Objekte

var entities = { 
    user: user, 
    entity: entity 
} 

var objectName = $trigger.data('object'); 

entities[objectName].init($trigger); 
+0

Danke, scheint dies die sauberste Lösung . –

1

Falls zu tun (oder Funktionen) im globalen Bereich definiert ist, können Sie auf diese zugreifen mit dem window Objekt:

var funcT = function() { 
 
    console.log('funcT was called'); 
 
} 
 

 
var objT = { 
 
    'a': 1, 
 
    'b': 2 
 
} 
 
function a() { 
 
    var funcName = 'funcT' 
 
    window[funcName](); 
 
    
 
    var objName = 'objT' 
 
    console.log(window[objName]); 
 
} 
 

 
a()

1

Mit window[variable] können Sie Variablen basierend auf einer anderen Variablen zugreifen.

Also alles, was Sie tun müssen, ist zu ersetzen objectName.init($tr‌​igger); mit: window[objectName].‌​init();

+0

Sie sind nicht global, also bleibe ich bei Maxx 'Antwort. Aber danke trotzdem –

Verwandte Themen