3

次のように dojox/data/JsonRestStore に依存する Dojo モジュールを作成しました。

define("my/MyRestStore", 
    ["dojo/_base/declare", "dojox/data/JsonRestStore"], 
    function(declare, JsonRestStore) {

var x = new JsonRestStore({
    target: '/items',
    identifier: 'id'
});

...

これは問題ありません。しかし、今は JsonRestStore コードの圧縮されていないバージョンをロードして、デバッグできるようにしたいと考えています。これを行う方法に関するドキュメントは見つかりませんが、「JsonRestStore.js.uncompressed.js」というファイルがあるため、コードを次のように変更しました。

define("my/MyRestStore", 
    ["dojo/_base/declare", "dojox/data/JsonRestStore.js.uncompressed"], 
    function(declare, JsonRestStore) {
...

うまくいくかもしれないと考えています。

JsonRestStore.js.uncompressed.js ファイルが FireBug に読み込まれているのを確認できますが、実行しようとするとエラーが発生しますnew JsonRestStore

JsonRestStore is not a constructor

これは機能するはずですか?

すべてのモジュールの圧縮されていないバージョンを使用するように Dojo を構成する方法はありますか? それが私が本当に望んでいることですが、それが唯一の方法である場合は、依存関係ごとに解決することにします。

アップデート

私がやりたいことを達成する方法を見つけました: JsonRestStore.js.uncompressed.js ファイルの名前を JsonRestStore.js に変更します。

ただし、これはハックな回避策のように思われるため、より良い方法 (構成など) があるかどうかを知りたいと思っています。

4

2 に答える 2

2

2 つのオプションがあります

1) カスタム ビルドを作成します。カスタム ビルドは、デバッグに使用できる単一の非圧縮ファイルを出力します。dojo.js.uncompressed.js を考えてみてください。ただし、使用するすべての追加モジュールが含まれています。

また

2) 開発環境の場合は、Dojo ソース コードを使用します。これは、Dojo Toolkit SDKをダウンロードし、そこから dojo.js を開発環境で参照することを意味します。

私が取り組んでいるプロジェクトでは、両方を行っています。Dojo 構成を動的にセットアップし、照会ストリング・パラメーターを使用して必要な構成を変更できるようにします。

問題をデバッグするときは、最初のオプションを使用してコードをステップ実行し、何が起こっているかを確認します。いくつかの重要な js を作成していて、カスタム ビルドのオーバーヘッドに変更を反映させたくない場合は、2 番目のオプションを使用します。

でこれについてもう少し説明します

http://swingingcode.blogspot.com/2012/03/dojo-configurations.html

于 2012-06-14T13:55:10.333 に答える
1

この理由は、使用されるファイル規則によって、ローダーがそのクラスロード (モジュール) を宣言するという事実によるものだと思います。1.7 ローダーはまだあまり堅牢ではありません。および「/」文字。

限定された推測にすぎません。しかし、それは「.」の解釈に関係していると思います。モジュール名ではなく、サブ名前空間を意味するクラス名の文字。

'define(/ * BLANK * / [ / * DEPENDENCIES * / ], ...)' (最初の文字列パラメータが指定されていない場合) は、ファイル名 (ベース名) によってロードされます。ただし、返された宣言にも格言があります。したがって、jsonrest を使用した例では、次のように分割/解析されます。

toplevel = dojox
mid = data
modulename = JsonRestStore.js.uncompressed

(失敗.. モジュールは、本来の dojox.data.JsonRestStore ではなく、dojox.data.JsonRestStore.js.uncompressed としてレンダリングされます)。

したがって、3 つのオプションがあります。

  1. 圧縮されていないクラスをロード<script src="{{dataUrl}}/dojox/data/JsonRestStore.js.uncompressed.js"></script>して dojo.ready で動作させる
  2. define([], function(){})uncompressed.js を変更するdefine("JsonRestStore", [], function() {})とうまくいくと思います(未確認)
  3. Dojo/テキスト ローダーを使用します。以下を参照してください。

テキストフィラーが必要です:)

define("my/MyRestStore", 
    ["dojo/_base/declare", "dojo/text!dojox/data/JsonRestStore.js.uncompressed.js"], 
    function(declare, JsonRestStore) {
...
        JsonRestStore = eval(JsonRestStore);
        // not 100% sure 'define' returns reference to actual class, 
        // if above renders invalid, try access through global reference, such as
        // dojox.dat...
于 2012-06-14T00:34:17.323 に答える