2016-04-21 1 views
1

J'ai une situation où je charge dynamiquement des DIV à partir d'un serveur avec dojo.xhrGet. Tout ça va bien. Le contenu revient bien, et le DIV est inséré dans la page très bien. Notez que dans cette situation, je ne peux pas connaître le DIV à charger avant qu'un autre événement se produise.Chargement du contenu dynamique - HTML5 est OK, Dojo n'est pas

Le problème semble être que les widgets DIJIT contenus dans les DIV dynamiques ne sont pas des widgets DIJIT, mais des widgets HTML simples. C'est-à-dire que je peux travailler dessus en utilisant "dojo.byId ('widgetID')" et utiliser le JavaScript standard, mais si j'essaie "registry ('widgetID')", j'obtiens une réponse "indéfinie".

Comment est-ce que je peux analyser le code DIV déclaratif et dynamiquement chargé dans de vrais widgets DIJIT?

+0

widgets _DIJIT contenus dans les DIVs dynamiques ne sont pas dijit widgets_, S'il vous plaît expliquer plus. – Himanshu

Répondre

1

Vous devez utiliser dojo/parser après que votre div markup a été chargé dans votre DOM. La fonction parse() transformera votre balisage HTML de div en un widget dijit si le balisage a été décoré correctement. Par ailleurs dojo.xhrGet est obsolète et vous devez utiliser dojo/request/xhr à la place.

Ci-dessous un exemple avec certains 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 .. Laissez-moi faire une réécriture pour remplacer xhrGet, et comprendre comment aller de l'avant. Il semble que vous analysiez le noeud dans lequel le contenu dynamique est placé. Donc, si j'ajoute actuellement tout le contenu dynamique à ce même nœud, je le ré-analyserais encore et encore. Devrais-je plutôt créer des espaces réservés vides? – JMorgan

+0

Merci pour la mise à jour pour xhr, Cela fonctionne très bien. L'analyse fonctionne correctement jusqu'à un certain point. J'ai d'abord dû créer un DIV vide, puis ajouter le contenu dynamique à la nouvelle DIV, puis analyser cela. Tout semble immédiatement être bien, parce que je peux voir que ce n'est pas maintenant une boîte de texte HTML ordinaire. Cependant, quand je tape dans le champ, l'espace réservé ne disparaît pas. Il est également difficile, voire impossible, d'obtenir la zone de texte pour recevoir le focus. Parfois, je ne peux simplement pas cliquer dans le champ. – JMorgan

+0

Compris. C'est soit tout DOJO ou rien. En fait, j'ajoutais simplement le innerHTML avec le contenu dynamique, puis je l'analysais. D'apparences qui ont fonctionné, mais a causé les problèmes mentionnés ci-dessus. Je suis passé à l'utilisation de domConstruct.place, et de la magie! – JMorgan