1

重複した質問を探しましたが、正確には見つかりませんでした。これはDojo の require() と AMD (1.7)に関するものですが、質問という形で質問させていただきます。問題は、なぜこのエラーが発生するのか、なぜ dijit が firebug で '3' を表示しているのかということです。

JSP ページ

<script type="text/javascript" src="<%= request.getContextPath() %>/js/dojoConfig.js"></script>
<script type="text/javascript"
src="http://xxxxxxxxxxxxx.com/dojo/1.7.2/dojo/dojo.js.uncompressed.js"></script>
<script type="text/javascript" src="<%= request.getContextPath() %>/js/reviewframe.js"></script>

dojoConfig.js

var dojoConfig = {
// Use the Asynchronous AMD loader.
// --------------------------------
async : true,
// Use debug.
// --------------------------------
isDebug : true,
// Parse the html on load for dojo rendered elements.
// Don't Parse on Load. I'm calling it manually in my main pageLoad.
// --------------------------------
parseOnLoad : false,
};

reviewframe.js (私の「メイン」)

require(
[ "dojo", "dijit", "dojo/parser", "js/XYDialog.js",
"dijit/layout/ContentPane", "dojox/image/LightboxNano", "dojo/ready",
"dojo/domReady!" ],
function(dojo, dijit, parser, XYDialog) {

XYDialog.js

define([ "dojo", "dijit", "dijit/form/Button", "dijit/TooltipDialog",
    "dijit/form/DropDownButton", "dijit/form/FilteringSelect" ], function(
    dojo, dijit) {

上記の XYDialog.js の定義にブレークポイントを設定します。続行をクリックすると、コンソールに次のエラーが表示されます。

コンソール

focus.js line 382
TypeError: can't convert undefined to object [Break On This Error]  ...attr] = typeof singleton[attr] == "function" ? lang.hitch(singleton, attr) : sin...

その行の直前に focus.js に Firebug ブレークポイントを設定すると、dijit が 3 であることがわかります。なぜですか? これは、必要な JavaScript またはモジュールが最終的に 3 になる他の場所で見たことがあります。

編集: OMG、Firefoxを閉じて、firebugなしでページをロードしました。できます!次に、firebug を開き、すべてのブレークポイントをクリアすると、再び機能します。おいおい。

フォローアップ の質問: firebug のブレークポイントが AMD ローダーを台無しにすることはありますか? やっぱり非同期です。ブレークポイントがタイミングの問題を引き起こす可能性があります...

4

2 に答える 2

1

ここには 2 つの問題があります。

  1. モジュール ID (XYDialog.js) ではなくファイル名を使用して AMD モジュールをロードしているため、AMD 以外のモジュールとして扱われ、ロードされています。論理パッケージに入れるか、構成でパスを定義する必要があります。

    ファイル構造:

    /js/foo/XYDialog.js
    /js/dojo/dojo.js
    

    コード:

    // reviewframe.js (My 'main')
    
    require(
    [ "dojo", "dijit", "dojo/parser", "foo/XYDialog",
    
  2. 通常、不可解なコード「3」は、パッケージへのパスが正しくないことを示しています。Firebug と組み合わされた最初の問題が、このエラーを一貫して与えていない可能性があると思います。

http://www.sitepen.com/blog/2012/10/31/debugging-dojo-common-error-messages/#incorrect-package-pathの下のメモを参照してください(この記事は一般に、私たちが書いたものであり、役立つでしょうDojo と AMD を使用する際の最も一般的なエラー メッセージの原因を特定します)。

于 2013-02-09T12:32:27.563 に答える