Как только вы включили dojo.js
на своей странице, вы сразу же получили всю базу Dojo. Это работает для любой сборки Dojo.
Но когда вы используете CDN Dojo (Google CDN в вашем случае), все dojo.require()
вызовы становятся асинхронными. Выдача dojo.require()
не означает, что то, что требовалось, будет доступно в следующей строке. Тебе стоит подождать.
К счастью, эта часть проста. Попробуйте изменить свой код так:
// require our stuff outside of dojo.ready()
dojo.require("dijit.Dialog");
dojo.require("dojo.parser");
dojo.require("dijit.Editor");
dojo.require("dojo.dnd.Source");
dojo.ready(function() {
// DOM is loaded and required files are downloaded
// let's create what we want
widgetSrcNode = new dojo.dnd.Source(...);
});
Или вы всегда можете сделать встроенное ожидание:
dojo.ready(function(){
// DOM is ready
// require more stuff
dojo.require("dijit.Dialog");
dojo.require("dojo.parser");
dojo.require("dijit.Editor");
dojo.require("dojo.dnd.Source");
// now wait for it
dojo.ready(function() {
// let's create what we want
widgetSrcNode = new dojo.dnd.Source(...);
});
});
Лично я предпочитаю первое & mdash; просто проще.
Кстати, я использовал dojo.ready()
вместо dojo.addOnLoad()
исключительно из-за моих личных предпочтений. Они являются синонимами и могут использоваться взаимозаменяемо.