1

私は dojo ビルドを作成しましたが、ビルドを有効/無効にする際の柔軟性が欲しかったので<script>、HTML ヘッダーのタグにロードしようとしました:

<script src="js/config.js"></script>
<script src="/dojo/1.9/dojo/dojo.js" data-dojo-config="async: true"></script>
<script src="/dojo/1.9/dojo/dojo-all.js"></script>

JSファイルを変更せずに残しました。機能しているようですが、問題がありましたが、IE9 のみで、WebSphere にデプロイされたアプリケーション バージョンのみでした (私は Apache2 でテストしました)。問題は、その特定のコード フラグメントでプロパティ 'dir' が定義されていないことでした。

    geom.isBodyLtr = function isBodyLtr(doc) {
        doc = doc || win.doc;
        return (win.body(doc).dir || doc.documentElement.dir 
           || "ltr").toLowerCase() == "ltr";
    };

同様の問題をいくつか検索した後 ( 「プロパティ 'dir' の値を取得できません: オブジェクトが null または未定義です」エラーを防止する方法 IE9 でページをロードするときに)、ロード シーケンスである可能性があることを検出しました。問題。HTML ヘッダーからレイヤーを削除し、次の順序で JS にロードしました。

require(["dojo/domReady!"], function(){
// load the layers, but only after document is ready
require(['dojo/dojo-all'], function(){

require(["dojo", "dojo/on", "dojo/dom-attr", "dojo/dom-class", (... and hundred more) 

ただし、人々がビルドを HTML ヘッダーにロードしていることは知っています。たとえば、ここのトピックから: Dojo Builds...? 今何?

私の質問は、私が何か間違ったことをしているのですか、それとも HTML ヘッダーを使用したそのトリックは、すべてのブラウザーで動作することが保証されているわけではありませんか?

これは私のビルドスクリプト構成です:

'dojo/dojo': {         
    include: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],         
    boot: true,         
    customBase: true    
},
'dojo/dojo-all': {
    include: ["dojo/on", "dojo/dom-attr", "dojo/dom-class", "dojo/query", "dojo/_base/lang", "dojo/request/xhr", 
    "dijit/registry","dijit/form/TextBox", "dijit/form/Textarea", "dijit/form/ComboBox", "dijit/form/FilteringSelect", "dijit/form/CheckBox", "dijit/form/Button",
    "gridx/core/model/cache/Sync", "gridx/Grid", "gridx/modules/SingleSort", "gridx/modules/ColumnResizer", 
    (...and hundred more)],
    boot: false, // exclude bootstrap modules
    customBase: false
},

これは dojo の build.bat です。

java -Xms256m -Xmx256m  -cp "%~dp0../shrinksafe/js.jar";"%
~dp0../closureCompiler/compiler.jar";"%~dp0../shrinksafe/shrinksafe.jar" 
org.mozilla.javascript.tools.shell.Main  "%~dp0../../dojo/dojo.js" 
baseUrl="%~dp0../../dojo" load=build %*
4

1 に答える 1

2

最近、レイヤー ファイルの読み込み順序に関して同様の問題が発生しました。IE9 で動作させるには、レイヤー ファイルの読み込み順序を制御する必要があります。そのため、最も簡単で信頼性の高い方法はrequire、 を使用してレイヤー ファイルを読み込むのではなく、レイヤー ファイル<script>を読み込むことです。

別の require 内にネストされた require を含むこのページの下部にあるサンプルを確認してください。

http://www.sitepen.com/blog/2012/06/11/dgrid-and-dojo-nano-build/

IE9 と IE10 での散発的な障害を回避するために、ここで製品にまったく同じ変更を加えました (7 つのレイヤー ファイルがあり、そのうちの 1 つは、他のいずれかで定義されたモジュールの古いバージョンをオーバーライドする必要がありました)。 <script> しばらくは問題なく動作していたように見えましたが、信頼できないことが判明しました。

于 2013-07-30T14:24:46.773 に答える