Dojo.dnd.source перестал работать при переходе на dojo 1.5 с источником из Google Apis - PullRequest
0 голосов
/ 11 декабря 2010

Я успешно использовал dojo.dnd.Source с Dojo 1.4.3, загруженным с моего веб-сервера. Однако, поскольку это общий хостинг или по какой-то другой причине, загрузка была ужасно медленной. (иногда что-то вроде 1 минуты 30 секунд)

Итак, я сейчас пытаюсь переключиться на DOJO 1.5 и googleapis в качестве источника. Результатом является намного лучшее время загрузки, но моя проблема сейчас в том, что dojo.dnd не распознается. вот код, который я использую для загрузки dojo.dnd.Source

         dojo.addOnLoad(function() {                
            dojo.require("dijit.Dialog");
            dojo.require("dojo.parser");
            dojo.require("dijit.Editor");
            dojo.require("dojo.dnd.Source");

            widgetSrcNode = new dojo.dnd.Source("admin_widgetSrcNode", {accept:["unknown"]});

Я получаю следующее сообщение об ошибке: dojo.dnd не определен http://mydomain.com/admin/somepage.php?wp=17 Строка 171

- конец сообщения

Строка 171: widgetSrcNode = new dojo.dnd.Source ("admin_widgetSrcNode", {accept: ["unknown"]});

Я не вижу никаких изменений в документации для dojo.dnd в версии 1.5 против 1.4, и я попробовал несколько вариантов djconfig, но не повезло. Что еще я могу попробовать?

1 Ответ

0 голосов
/ 11 декабря 2010

Как только вы включили 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() исключительно из-за моих личных предпочтений. Они являются синонимами и могут использоваться взаимозаменяемо.

...