Sto lavorando con Dojo e utilizzo il "Pattern modulo" come descritto in Mastering Dojo. Per quanto posso vedere, questo pattern è un pattern JavaScript generale e ampiamente utilizzato. La mia domanda è: come facciamo il debug dei nostri moduli?Pattern modulo JavaScript/Dojo: come eseguire il debug?
Finora non sono riuscito a convincere Firebug a mostrarmi la fonte del mio modulo. Firebug sembra mostrare solo l'istruzione eval dojo usata per eseguire il metodo factory. Quindi non sono in grado di scorrere la mia fonte del modulo. Ho provato a mettere le istruzioni "debugger" nel mio codice del modulo, e Firebug sembra fermarsi correttamente, ma non mostra la fonte.
Codice di esempio conteggiato di seguito. Questo è solo un esempio di complessità sufficiente per rendere plausibile la necessità di debugging, non è destinato a essere codice utile.
La pagina
<!--
Experiments with Debugging
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>console me</title>
<style type="text/css">
@import "../dojoroot/dojo/resources/dojo.css";
@import "../dojoroot/dijit/themes/tundra/tundra.css";
@import "edf.css";
</style>
<script type="text/javascript" src="../dojoroot/dojo/dojo.js">
</script>
<script type="text/javascript" >
dojo.registerModulePath("mytest", "../../mytest");
dojo.require("mytest.example");
dojo.addOnLoad(function(){
mytest.example.greet();
});
</script>
</head>
<body class="tundra">
<div id="bulletin">
<p>Just Testing</p>
</div>
</body>
</html>
<!-- END: snip1 -->
Lo script java mi piacerebbe eseguire il debug
dojo.provide("mytest.example");
dojo.require("dijit.layout.ContentPane");
/**
* define module
*/
(function(){
//define the main program functions...
var example= mytest.example;
example.greet= function(args) {
var bulletin = dojo.byId("bulletin");
console.log("bulletin:" + bulletin);
if (bulletin) {
var content = new dijit.layout.ContentPane({
id: "dummy",
region: "center"
});
content.setContent('Greetings!');
dojo._destroyElement(bulletin);
dojo.place(content.domNode, dojo.body(), "first");
console.log("greeting done");
} else {
console.error("no bulletin board");
}
}
})();
debugAtAllCosts in genere non è più necessario su FF e WebKit, per le ragioni menzionate nella mia risposta – peller
Tutto quello che posso dire è che senza i djconfigs qui mostrati il debugger mostra la riga "eval" piuttosto che il codice eval-ed, e stepping è inutile. Con il djconfig mostro che l'intera fonte è visibile e posso attraversarla piacevolmente. – djna
In Chrome ho scoperto che ero in grado di eseguire il debug dei sorgenti dei miei moduli, ma non in Firebug (1.8), quindi questa risposta è stata abbastanza rapida, grazie. – mydoghasworms