Реакция на ваше обновление:
Я настоятельно думаю, что вы должны попробовать с dojo.addOnLoad()
. Вместе два последних <script>
раздела вашего <head>
станут:
<script>
dojo.addOnLoad(function(){
dojo.require("dojox.data.CsvStore");
dojo.require("dijit.Tree");
dojo.require("dojo.parser"); /* I don't think you really need this line */
var stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
});
</script>
Проблема с вашим исходным кодом заключается в том, что вы не можете гарантировать, что функция конструктора dojox.data.CsvStore
была прочитана к тому времени, когда вы собираетесь создать ее экземпляр stateStore
. Вот тут и приходит dojo.addOnLoad()
, что дает вам гарантию, что остальная часть javascript была загружена до выполнения абстрактной функции, переданной в качестве параметра addOnLoad()
.
Поскольку это проблема синхронизации, ваш собственный оригинальный код может иногда работать, а может и не работать другим: это будет зависеть от скорости загрузки и порядка, в котором ваш браузер объединяет различные биты JavaScript. Вот почему использование удаленной библиотеки dojo может иногда давать другие результаты, чем использование вашей собственной локальной копии библиотеки dojo.
Тем не менее, если вы используете Firefox 3 (ранее 3.0.6), помните, что я сказал об известной ошибке. В этом случае вы можете захотеть поместить этот блок <script>
непосредственно перед закрывающим тегом </body>
... (эта опция также будет работать в других браузерах.)