为什么Dojo 1.6不能在IE8中使用Dojo .require正确加载javascript文件?

Why would Dojo 1.6 fail to properly load javascript file in IE8 using dojo.require?

本文关键字:Dojo require 加载 javascript 文件 不能 IE8 为什么      更新时间:2023-09-26

以下代码在Firefox和Internet Explorer 8中与Dojo 1.5一起工作。

在Dojo 1.6中,它仍然可以在Firefox中工作,但不能在IE8中工作。

当调用wrappingFunctionInPlainJsFile()时,我得到Object doesn't support this property or method错误。

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();
}

如果你能告诉我哪里做错了,我将不胜感激。

注意:如果我直接在HTML页面上导入plainJsFile.js而不是使用dojo.require,那么我没有问题。

相信道场的目的。要求系统将代码分解为模块,这些模块不仅仅是任意的js块,而是dojo. declarations对象。当您编写dojo. provider ("js.plainJsFile")时,按照惯例,我希望有一个名为"js"的全局对象,它有一个属性"plainJsFile"。参见本页的代码示例。

我实际上使用dojo。需要的方式,忽略我所描述的约定,它工作得很好——在firefox中。但IE不会吞下它。如果所有需要的js文件被压缩成一个文件(你提到的解决你的问题),IE 表现。

所以,基本上,我认为IE是不灵活的范围,而dojo。Require正在做它的事情,而你把函数声明放在一个"模块"中,就像那样破坏了事情。试着按照惯例去做,看看是否有帮助。

我尝试了dojo邮件列表,并得到了Karl Tiedt的修复。

请看这里:http://dojo-toolkit.33424.n3.nabble.com/Why-would-Dojo-1-6-fail-to-properly-load-javascript-file-in-IE8-using-dojo-require-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。