2012-01-24 11 views
7

Estoy tratando de usar jquery para cargar un cuadro de dojo. Estoy usando este código Sin embargo, en el segundo clic, en el primer botón obtengo este error. Lo mismo ocurre si hago clic en el primer botón, hago clic en el segundo y hago clic de nuevo en el primero. Este problema me está volviendo loco.this.domNode is null

demo here

enter image description here

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.lista_').click(function() { 
     $.get('index1.php', function (data) { 
      dojo.addOnLoad(function() { 
       require(["dojo/_base/xhr", "dojo/parser", "dojo/dom"], function (xhr, parser, dom) { 
        var um = []; 
        dijit.registry.filter(function (w) { //problem here, maybe this code destroy something that should not be destroyed 
         if (dojo.indexOf(um)) { 
          w.destroyRecursive(); 
         } 
        }); 
        $('#paginas').html(data); 

        dojo.parser.parse(dojo.byId('paginas')); 

       }); 
      }); 
     }); 
    }); 
}); 
</script> 
+2

Intente utilizar un archivo js utilizado en la depuración y no uno minimizado. esto es para una depuración más fácil. – Farmor

+0

¿Se pregunta por qué está utilizando dos frameworks de JavaScript? – SergeS

+0

bueno, es irrelevante para la pregunta. Solo estoy usando Dojo para crear las tablas. – Daniel

Respuesta

3

Parece que está tratando de eliminar la vieja tabla antes de insertar/análisis de la nueva, pero no creo que lo que está sucediendo. Esto puede hacer que Dojo elimine varios errores.

dijit.registry.filter(function (w) { //problem here, maybe this code destroy something that should not be destroyed 
    if (dojo.indexOf(um)) { 
     w.destroyRecursive(); 
    } 
}); 

No estoy seguro de lo que está haciendo aquí. La función filter devolverá una matriz de widget para la cual la devolución de llamada devuelve verdadero. Además, dojo.indexOf se utiliza para buscar un elemento en una matriz (no estoy seguro de qué tipo de magia negra estás haciendo allí: P).

creo (si he entendido sus intenciones), debería más bien hacer:

dijit.registry.findWidgets(dojo.byId("paginas")).forEach(function(w) { 
    w.destroy(); 
}); 

Esto destruirá el widget (s) en el interior #paginas antes de introducir y analizar el código HTML recién descabellada.

Editar: Al hacer clic en el 2 ° botón, y el gráfico se elimina, la etiqueta <style> también se elimina. Es por eso que ve artefactos del div de información sobre herramientas, porque ya no está oculto por CSS. Puede resolver esto a través de la importación claro.css en el archivo principal, es decir, poner esto:

<style type="text/css"> 
@import "http://ajax.googleapis.com/ajax/libs/dojo/1.7/dijit/themes/claro/claro.css"; 
</style> 

en el encabezado del archivo principal en lugar de en el HTML se carga con jQuery (index1.php).

+0

gracias por su respuesta. El enlace ahora se actualiza con su sugerencia. Pero hay un problema cuando hacemos clic en el segundo botón, después del primero. Necesita activar la información sobre herramientas para reproducir el problema. Algunos divs no son eliminados. – Daniel

+0

@Daniel Hmm, no veo los errores en la página actualizada. Tiene razón al decir que los consejos sobre herramientas no se eliminan, pero no estoy seguro de que sean un problema porque no tienen una identificación explícita (y la información sobre herramientas es una especie de singleton). – Frode

+0

No hay errores ahora. El único problema es el material de la información sobre herramientas que no se elimina. Y si destruyo por cuerpo o algo obtendré el error inicial this.domNode es nulo – Daniel

Cuestiones relacionadas