0

ページに道場ウィジェットを追加しようとしています。古いアプリケーションなので、dojo1.6を使用しています。ウィジェットは、HTMLテンプレートといくつかの追加オプションを定義するCSSファイルを含むjsファイルで定義されます。

私はJSPとJSPFを使用していますが、何らかの理由で(おそらく、2つの違いはありますか?)、<script>使用しているJSPFファイルにタグを配置すると、ページの読み込み時にタグが実行されません。後でこれを整理し、その間に他のものをテストするために、スクリプトタグを実行するヘッダーJSPファイルにコードを配置することにしました。

dojo.require("x.y.z");

<div
    id="testDiv"
    dojoType="x.y.z" onclick="dojo.parser.parse()">abc</div>

これは私が望むように機能します。divがあり、それをクリックすると、定義したテンプレートを含むdojoウィジェットが読み込まれます。

JSPFファイルに、同じdiv(abc)を入れてから、同様のことを行いましたが、別の手順を実行します。

<div onclick="
    dojo.require('x.y.z');
    var n = document.createElement('div');
    n.setAttribute('id', 'xyz');
    n.setAttribute('dojoType', 'x.y.z');
    n.setAttribute('onclick', 'dojo.parser.parse()')
    n.innerHTML = 'Test';
    document.body.appendChild(n);
    ">Click Me Please!</div>

私がこれを入れた理由は、私がabcを持っていたとき、Firebugで次のエラーが発生したためです。

Error parsing in _ContentSetter#Setter_1:13_0
Error: Could not load class 'x.y.z

Error undefined running custom onLoad code: This deferred has already been resolved
undefineddojo._scopeArgs = [undefined];

これは、JSPのときとは異なり、xyzがdojo.require'dでなかったためだと思いました。また、jspfでjavascriptを自動的に実行できなかったため、onclickと次に、同じことを実行して、テストして機能させるようにします。

2つ目のアイデアは、それをクリックして、以前からdivを表示できるようにする必要があるというものでした。それはrequirefineを実行し、divを作成するようですが、divをクリックすると表示されます

Tried to register widget with id==(numbers) but that id is already registered

だから、これは私がすべてに対してdojo.parser.parseを実行していて、すでにページ上にあるものをキャッチしていたためだと思いました-実際には、私が作成した新しいもので実行する必要があります。だから私はたった1つのことでdojo.parser.parseを行う方法を理解しようとしていました。1.8と1.7の情報は見つかりましたが、1.6は見つかりませんでした。どうすればこれを行うことができますか?私は物事を正しく理解し、適切な仮定を立てていますか?

4

1 に答える 1

0
Error: Could not load class 'x.y.z

requireパッケージの説明の場所にないクラスを呼び出していることを意味します。xyzは、次のようにdojo.jsファイル(script-tagを介して含まれる)からの相対パスに変換されます。

 <!-- if -->
 <script src="/server/path/dojotoolkit/dojo/dojo.js"></script>
 <!-- then -->
 <script>dojo.require("x.y.z");</script>
 <!-- equals -->
 <script src="/server/path/dojotoolkit/dojo/ ../x/y/z.js"></script>

クラスの読み込みに失敗したため、考えられる原因はファイルが存在せず、HTTP404エラーが発生したことです。

このエラーメッセージに関して:

Tried to register widget with id==(numbers) but that id is already registered

これは、ウィジェットを2回作成したことを意味します(一意のID:testDivを設定します)。おそらくdivonclickが2回呼び出されたためです。dijitwidgetIdは一意のままである必要があります。同じものを使用して新しいウィジェットを作成する必要がある場合は、最初idに呼び出してください。dijit.byId(id).destroy();

簡単にマークアップにnoを残すとid、一般的な自動インクリメントIDが生成されます。

于 2012-08-17T21:09:56.223 に答える