Pracuję z Dojo i używam "Wzorca modułu", jak opisano w Mastering Dojo. O ile widzę, ten wzorzec jest powszechnym i powszechnie stosowanym wzorcem JavaScript. Moje pytanie brzmi: w jaki sposób debugujemy nasze moduły?Model modułu JavaScript/Dojo - jak debugować?
Do tej pory nie udało mi się przekonać Firebuga, by pokazał mi źródło mojego modułu. Firebug wydaje się pokazywać tylko instrukcję dojo eval używaną do wykonania metody fabrycznej. Dlatego nie jestem w stanie przejść przez moje źródło modułu. Próbowałem wstawiania "debugger" w moim module code i Firebug wydaje się zatrzymywać poprawnie, ale nie pokazuje źródła.
Wymyślony kod przykładowy poniżej. Jest to tylko przykład wystarczającej złożoności, która sprawia, że debugowanie jest wiarygodne, nie ma być przydatnym kodem.
Strona
<!--
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 -->
skrypt java Chciałbym debugowania
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 nie powinny być już konieczne na FF i WebKit, z powodów wymienionych w mojej odpowiedzi – peller
Wszystko, co mogę powiedzieć, to to, że bez pokazanych tutaj djconfig debugger pokazuje raczej linię "eval" niż eval-ed, a stepping is nieprzydatne. Dzięki djconfig pokazuję, że pełne źródło jest widoczne i mogę przejść przez nie ładnie. – djna
W Chrome stwierdziłem, że udało mi się zdebugować źródło moich modułów, ale nie w Firebug (1.8), więc ta odpowiedź była oszczędna, dzięki. – mydoghasworms