2016-04-21 18 views
1

Ich habe eine Situation, wo ich DIV dynamisch von einem Server mit dojo.xhrGet geladen werde. Das ist alles in Ordnung. Der Inhalt kommt wieder gut, und das DIV wird in die Seite eingefügt. Beachten Sie, dass ich in dieser Situation den DIV nicht kennen kann, um zu laden, bevor ein anderes Ereignis auftritt.Dynamic Content Loading - HTML5 ist OK, Dojo ist nicht

Das Problem scheint zu sein, dass DIJIT-Widgets, die in den dynamischen DIVs enthalten sind, keine DIJIT-Widgets sind, sondern normale HTML-Widgets. Das heißt, ich kann sie mit "dojo.byId ('widgetID')" bearbeiten und Standard-JavaScript verwenden, aber wenn ich "registry ('widgetID')" versuche, bekomme ich eine "undefined" Antwort.

Wie kann ich dynamisch geladenen und anderweitig deklarativen DIV-Code erhalten, um in echte DIJIT-Widgets geparst zu werden?

+0

_DIJIT Widgets innerhalb der dynamischen DIVs nicht enthalten sind dijit widgets_, erklären Sie mehr. – Himanshu

Antwort

1

Sie müssen dojo/parser verwenden, nachdem Ihr Markup-Div in Ihr DOM geladen wurde. Die Funktion parse() wandelt Ihr HTML-Markup von div in ein Dijit-Widget um, wenn das Markup korrekt eingerichtet wurde.

Übrigens dojo.xhrGet ist veraltet und Sie sollten stattdessen dojo/request/xhr verwenden.

Below und Beispiel mit einigen Pseudo-Code:

require(["dojo/request/xhr", "dojo/dom-construct"], function(xhr, domConstruct){ 
    xhr("example.json", { 
    handleAs: "text" // or whatever 
    }).then(function(data){ 
    // place your div to the dom (data is an html markup similar to this <input data-dojo-type="dijit/form/TextBox" type="text" name="dept1" />) 
    var targetDom = 'targedDom'; 
    domConstruct.place(data, targetDom, 'replace'); 
    // trasform your div to a dijit widget 
    parser.parse(dojo.byId(targetDom)).then(function(){ 
     // after is parsed do smt here 
    }); 

    }, function(err){ 
    // handle the error condition 
    }, function(evt){ 
    // handle a progress event from the request if the browser supports XHR2 
    }); 
}); 
+0

OK .. Lassen Sie mich etwas umschreiben, um xhrGet zu ersetzen und herauszufinden, wie Sie vorwärts gehen. Es sieht so aus, als ob Sie den Knoten analysieren, in den der dynamische Inhalt platziert wird. Wenn ich also den gesamten dynamischen Inhalt zu diesem Knoten hinzufüge, würde ich ihn immer wieder neu analysieren. Sollte ich stattdessen leere Platzhalter erstellen? – JMorgan

+0

Danke für das Update für xhr, das funktioniert gut. Das Parsing funktioniert bis zu einem gewissen Grad. Ich musste zuerst ein leeres DIV erstellen und dann den dynamischen Inhalt dem neuen DIV hinzufügen und dann analysieren. Alles scheint sofort in Ordnung zu sein, denn ich kann sehen, dass es jetzt keine gewöhnliche HTML-Textbox mehr ist. Wenn ich jedoch in das Feld eintippe, verschwindet der Platzhalter nicht. Es ist auch schwierig, wenn nicht unmöglich, die Textbox zum Fokus zu bekommen. Irgendwann kann ich einfach nicht in das Feld klicken. – JMorgan

+0

Ich habe es herausgefunden. Es ist entweder alles DOJO oder nichts. Ich habe das innerHTML nur mit dem dynamischen Inhalt angefügt und dann analysiert. Von Anschein, der funktioniert hat, aber die oben genannten Probleme verursacht hat. Ich wechselte zu domConstruct.place und Magie! – JMorgan