2011-12-08 23 views
5

Seguí the dojo tutorial para mostrar un cuadro de diálogo de "Términos y condiciones". La versión dojo es 1.7.0. Probé el ejemplo en cromo. En mi página de prueba hago clic derecho para mostrar un menú y luego selecciono el ítem "Inspeccionar Elemento". Encontré un mensaje de error en la consola de pestañas. El mensaje de error es:¿Por qué dojo 1.7 no puede mostrar el diálogo?

Uncaught TypeError: Cannot call method 'show' of undefined 
showDialogdialog 
(anonymous function) 
onclickdialog 

Luego voy a la dojo api page. Encuentro dojo 1.7.0 no hay ningún método bajo la clase dijit.Dialog. Entonces, ¿cómo mostrar el diálogo usar dojo 1.7.0? ¿Alguna idea? Muchas gracias.

Respuesta

0

A partir del mensaje de error, el objeto de diálogo es undefined. Aún usa la función show para mostrar dijit.Dialog. Verifique dos veces si la instancia dijit.Dialog se creó correctamente.

Código de ejemplo:

var dlg = new dijit.Dialog({ 
    id: "myDialog", 
    title: "Sample", 
    content: "<div>Hello World!</div>" 
}); 
dlg.show(); 

La razón por la que no se puede ver la función de show en la documentación del API se debe a que esta función show se declara en realidad en una clase interna dijit._DialogBase.

+0

parece que la herramienta de API deben recoger los métodos heredados (y mostrarlas cuando el verde 'en' botón está en.Suena como otro error, probablemente relacionado con la transición de AMD – peller

4

Parece que hay un problema con Google CDN, porque el ejemplo del tutorial funciona bien con la copia local de Dojo 1.7.

El cargador Dojo carga el archivo Dialog.js, pero no puede analizarlo, lo que da como resultado "parser.js: 8 Error no detectado: no se pudo cargar la clase 'dijit.Dialog'".

falta el método dijit.Dialog.show() porque el widget Dialog no está instanciado y dijit.byId ("terms") devuelve "undefined".

Para solucionar este dijit.Dialog carga horaria/archivo a través de etiquetas de script:

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.0/dijit/Dialog.js"></script> 

Llené este tema en Dojo seguimiento de errores: Ticket #14415.

0

que tiene Tratar dojo 1.7.1 y es el trabajo con este códigohttp://jsfiddle.net/nv4YC/dojo 1.7.0 trabajo también.

From your link (the dojo tutorial) se tiene que cambiar

dojo.require("dijit.Dialog");

y en la etiqueta de script debe tener asíncrono: verdadera

como estodata-dojo-config="async: true, parseOnLoad:true"

Vamos a ver en mi jsFiddle o tratar este código

<head> 
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js" 
    data-dojo-config="async: true, parseOnLoad:true"></script> 
    <script> 
     require(["dijit/registry", "dijit/Dialog"], function (registry) 
     { 
      // Show the dialog 
      showDialog = function showDialog() 
      { 
       registry.byId("terms").show(); 
      } 
      // Hide the dialog 
      hideDialog = function hideDialog() 
      { 
       registry.byId("terms").hide(); 
      } 
     }); 
    </script> 
</head> 

<body class="claro"> 
    <button onclick="showDialog();">View Terms and Conditions</button> 
    <div class="dijitHidden"> 
     <div data-dojo-type="dijit.Dialog" style="width:600px;" data-dojo-props="title:'Terms and Conditions'" 
     id="terms"> 
      <p> 
       <strong>Please agree to the following terms and conditions:</strong> 
      </p> 
      <div style="height:160px;overflow-y:scroll;border:1px solid #769dc4;padding:0 10px;width:600px"> 
       <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed suscipit 
        massa. Aenean vel turpis tincidunt velit gravida venenatis. In iaculis 
        urna non quam tincidunt elementum. Nunc pellentesque aliquam dui, ac facilisis 
        massa sollicitudin et. Donec tincidunt vulputate ultrices. Duis eu risus 
        ut ipsum auctor scelerisque non quis ante. Nam tempor lobortis justo, et 
        rhoncus mauris cursus et. Mauris auctor congue lectus auctor ultrices. 
        Aenean quis feugiat purus. Cras ornare vehicula tempus. Nunc placerat, 
        lorem adipiscing condimentum sagittis, augue velit ornare odio, eget semper 
        risus est et erat....</p> 
      </div> 
      <button onclick="hideDialog();">I Agree</button> 
      <button onclick="alert('You must agree!');">I Don't Agree</button> 
     </div> 
    </div> 
</body> 

Cuestiones relacionadas