2016-11-07 3 views
0

Ich habe die folgende Funktion in JSON-Daten gespeichert werden:Erstellen Sie eine anonyme Funktion Objekt aus einem Konstruktor und speichern sie in einem anderen Objekt

function (e) { e.preventDefault();var caro=$(e.target).parents('.carousel');curr=$(caro).parents('.grid-stack-item');currInt=$(curr).find('.carousel-indicators li.active').data('slide-to');$(curr).find('.carousel-indicators li.active').removeClass('active');currInt+=1;var currLi=$(curr).find('.carousel-indicators li')[currInt];$(currLi).addClass('active');$(caro).carousel(1);$(caro).carousel('pause');var tr=$(e.target).closest('tr');data=this.dataItem(tr);wizard(1,$(e.target).parents('.grid-stack-item'),data); } 

ich eine externe Bibliothek bin mit der die Funktion in der JSON-String erfordert als JS-Funktion an eine Objekteigenschaft angehängt werden.

wahrsten Sinne des Wortes, sieht der Code wie folgt aus:

grid({ 
    click: data.functionData 
)}; 

Das Problem, das ich habe, ist die data.functionData als String ausgewertet wird und wenn das Click-Ereignis auf dem Rasterobjekt ausgeführt wird, es ergibt sich als ein Fehler, da die Daten eine Funktion und keine Zeichenfolge sein sollten.

Was ich tun müssen, ist eine anonyme Funktion erstellen ...

var anonFun = new Function(); 

und nimmt ein Ereignis als Parameter ....

function (e) { } 

Dann verbinden Sie es mit dem Click-Ereignis in das Gitter ...

grid({ click: function (e) { //dostuff } }); 

Ich bin nah dran, dies zu erreichen, aber mein Problem ist jetzt, ich weiß nicht, wie man eine Anonymität gibt Eine Funktion, die mit einem Funktionskonstruktor den Parameter 'e' erzeugt.

Zu meinem aktuellen Zustand geben buchstäblich, mein Code ...

var jsonData = "function (e) { e.preventDefault();var caro=$(e.target).parents('.carousel');curr=$(caro).parents('.grid-stack-item');currInt=$(curr).find('.carousel-indicators li.active').data('slide-to');$(curr).find('.carousel-indicators li.active').removeClass('active');currInt+=1;var currLi=$(curr).find('.carousel-indicators li')[currInt];$(currLi).addClass('active');$(caro).carousel(1);$(caro).carousel('pause');var tr=$(e.target).closest('tr');data=this.dataItem(tr);wizard(1,$(e.target).parents('.grid-stack-item'),data); }"; 

var anonFunc = new Function(jsonData); 

grid({ click: anonFunc)}; 

Ich glaube, ich brauche so etwas wie zu tun:

var anonFunc = new Function(e, jsonData); 

Und jsonData ändern nur die inneren Inhalte zu sein die Funktion.

+1

Ja, das wie ein Ansatz klingt. Sie sollten die 'function (e) {' und trailing '}' off einfach entfernen können, um dies zu tun, oder ändern Sie Ihre JSON-Zeichenfolge, um sie nicht an erster Stelle zu haben? –

+0

(Funktion (e) {}) ("dies wird als e übergeben"); ... –

Antwort

Verwandte Themen