Почему Dojo 1.6 не может правильно загрузить файл javascript в IE8 с помощью dojo.require? - PullRequest
1 голос
/ 28 июля 2011

Следующий код работал с Dojo 1.5 в Firefox и Internet Explorer 8.

В Dojo 1.6 он по-прежнему работает в Firefox, но не работает в IE8.

Я получаю ошибку Object doesn't support this property or method при вызове wrappingFunctionInPlainJsFile().

HTML-страница:

<div dojoType="widget.MyCustomWidget"></div>

В виджете / MyCustomWidget.js

dojo.provide("widget.MyCustomWidget");

dojo.require("js.plainJsFile");

dojo.declare("widget.MyCustomWidget", [dijit._Widget, dijit._Templated],  {
    ...

    // this gets called when the widget is clicked on in the UI
    run: function() {
        wrappingFunctionInPlainJsFile();
    },

    ...

});

В js / plainJsFile.js

dojo.provide("js.plainJsFile");

function someFunction() {
}

function wrappingFunctionInPlainJsFile(){
    new someFunction();
}

Буду очень признателен за любые идеи о том, что я делаю неправильно.

Примечание: если я импортирую plainJsFile.js непосредственно на HTML-страницу вместо использования dojo.require, то у меня нет проблем.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Я считаю, что цель системы dojo.require - разбить ваш код на модули, где эти модули - не просто произвольные куски js, а объекты dojo.declare'd.Когда вы пишете dojo.provide ("js.plainJsFile"), по соглашению я ожидаю, что будет глобальный объект с именем "js", который имеет свойство "plainJsFile".Посмотрите пример кода на этой странице.

Я на самом деле использую dojo.require, как вы делаете, игнорируя соглашение, которое я описываю, и оно прекрасно работает - в Firefox.IE не проглотит это все же.IE будет вести себя, если все необходимые js-файлы сжимаются в один файл (который, как вы упомянули, решают вашу проблему).

Итак, в принципе, я думаю, что IE менее гибок в отношении областиdojo.require делает свое дело, и вы помещаете объявления функций в «модуль», как это разрушает вещи.Попробуйте придерживаться соглашения и посмотрите, поможет ли это.

0 голосов
/ 30 июля 2011

Я попробовал список рассылки додзё и получил исправление от Карла Тиедта.

См. Здесь: http://dojo -toolkit.33424.n3.nabble.com / Почему-бы-Dojo-1-6-не удалось правильно загрузить файл javascript-файла в IE8-использовании -dojo-требовать-td3204800.html # a3204894

Копирование / вставка раствора.

"Это странная вещь IE ...

dojo.provide("js.plainJsFile");

(function() {
 function someFunction()

 wrappingFunctionInPlainJsFile = function() {
    new someFunction();
 }
})();

должно работать ... Я всегда использую свои пространства имен, хотя и делаю это так

dojo.provide("js.plainJsFile");

(function(pjsf) {

  pjsf.someFunction = function()

  pjsf.wrappingFunctionInPlainJsFile = function(){
    new someFunction();
  }
})(js.plainJsFile);

"

Примечание: я попробовал вышеуказанное решение, и оно работало для меня в IE8 и Firefox.

...