2011-07-27 17 views
1

以下代碼與Firefox和Internet Explorer 8中的Dojo 1.5一起使用。爲什麼Dojo 1.6使用dojo.require無法在IE8中正確加載JavaScript文件?

使用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那麼我沒有問題。

+0

您的'somefunction'缺少大括號'{}'。我認爲它有一個翻譯錯誤,對吧? – hugomg

+0

您確定您的plainJsFile.js在您嘗試使用時已被加載?你是異步加載模塊嗎?如果是這樣,你需要使用dojo.ready()。 –

+0

@missingno是的,錯字。謝謝。固定。 –

回答

0

我嘗試了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中爲我工作。

1

我相信dojo.require系統的目的是將代碼分解成模塊,這些模塊不僅是js的任意塊,而且是dojo.declare的對象。當你編寫dojo.provide(「js.plainJsFile」)時,按照慣例,我希望有一個叫做「js」的全局對象,它有一個屬性「plainJsFile」。請參閱this頁面上的代碼示例。

我實際上使用dojo.require你做的方式,忽略了我所描述的約定,而且它工作得很好 - 在firefox中。 IE瀏覽器不會吞下它。 IE 的行爲,如果所有必需的js文件被壓縮成一個文件(你提到的問題解決了你的問題)。因此,基本上,我認爲IE對於範圍的靈活性較低,而dojo.require正在做它的事情,並且你將函數聲明放在一個「模塊」中,就像破壞了事物一樣。試着按照慣例去看看是否有幫助。

相關問題