2011-12-08 10 views
5

Ho seguito the dojo tutorial per visualizzare una finestra di dialogo "Termini e condizioni". La versione dojo è 1.7.0. Ho provato l'esempio in chrome. Nella mia pagina di prova faccio clic con il pulsante destro del mouse per visualizzare un menu, quindi selezionare la voce "Ispeziona elemento". Ho trovato un messaggio di errore nella console delle schede. Il messaggio di errore è:Perché dojo 1.7 non può mostrare la finestra di dialogo?

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

Quindi vado allo dojo api page. Trovo il dojo 1.7.0 nessun metodo sotto la classe dijit.Dialog. Quindi, come mostrare la finestra di dialogo utilizzare dojo 1.7.0? Qualche idea? Grazie mille.

risposta

0

Dal messaggio di errore, l'oggetto di dialogo è undefined. Si usa ancora la funzione show per visualizzare un dijit.Dialog. Verificare se l'istanza dijit.Dialog è stata creata correttamente.

codice di esempio:

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

La ragione per cui non si può vedere la funzione show nella documentazione delle API è perché questa funzione show è effettivamente dichiarato in una classe interna dijit._DialogBase.

+0

sembra che lo strumento API dovrebbe essere raccogliendo metodi ereditati (e la visualizzazione quando il verde 'in' pulsante è sopra.Sembra un altro bug, probabilmente correlato alla transizione AMD – peller

4

Sembra essere un problema con Google CDN, perché l'esempio del tutorial funziona bene con la copia locale di Dojo 1.7.

Il caricatore Dojo carica il file Dialog.js, ma non è in grado di analizzarlo, il che risulta in "parser.js: 8 Errore non rilevato: impossibile caricare la classe 'dijit.Dialog'".

il metodo dijit.Dialog.show() manca perché il widget Finestra di dialogo non è istanziato e dijit.byId ("termini") restituisce "non definito".

Per risolvere questa classe/file di caricamento dijit.Dialog tramite tag script:

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

Ho riempito questo problema nel Dojo bug tracker: Ticket #14415.

0

devo provare dojo 1.7.1 ed è il lavoro con questo codicehttp://jsfiddle.net/nv4YC/dojo 1.7.0 lavoro troppo.

From your link (the dojo tutorial) è bisogno di cambiare

dojo.require("dijit.Dialog");

e al tag script dovrebbe avere asincrona: vero

come questodata-dojo-config="async: true, parseOnLoad:true"

Vediamo sul mio jsfiddle o provare questo codice

<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> 

Problemi correlati