0

私は ExtJS 4 を初めて使用し、クラスの拡張に問題があります。私はこれらのファイルを持っています:

UsersWindow.js

Ext.define('MyDesktop.UserModel', {
    extend: 'Ext.data.Model',
    /* ... */
}

Ext.define('MyDesktop.UsersWindow', {
    /* ... */
}

DealersWindow.js

Ext.define('MyDesktop.DealerModel', {
    extend: 'MyDesktop.UserModel',
    /* ... */
}

Ext.define('MyDesktop.DealersWindow', {
    extend: 'MyDesktop.UsersWindow',
    /* ... */
}

アプリケーションを実行すると、すべてが期待どおりに機能しますが、次の ajax 呼び出しがあります。

/UserModel.js?_dc=1379135132790

これにより、404 が返され、JavaScript の解析中にエラーが発生します。ExtJS がこの呼び出しを行う理由を理解したいですか? すべてのクラスは独自のファイルにある必要がありますか? このファイルを検索しないように ExtJS を構成できますか?

ご協力ありがとうございました。

4

1 に答える 1

1

はい、Ext Loader が適切に動作するには、すべてのクラスが独自のファイルに含まれている必要があります。さらに、ファイルの名前はクラスと同じである必要があり、そのパスは名前空間と一致する必要があります。

ここで何が起こるかというと、アプリケーションのルート ディレクトリとして構成されているように見える、名前空間のルート パス内のファイルで見つかると予想されるクラスをロードするようにextend: 'MyDesktop.UserModel'行が要求するということです...Ext.LoaderUserModelUserModel.jsMyDesktop

pathsのプロパティLoader、または の1 つをApplication使用して、さまざまなネームスペースのルート ソース ディレクトリを設定できます。

Ext がこのファイルを読み込もうとするのを防ぎたい場合は、ローダーを無効にしてから、すべてのソース ファイルを<script>タグとして HTML に含める必要があります。これにより、後でアプリケーションの製品ビルドをコンパイルすることもできなくなると思います。

または、の定義をの定義のMyDesktop.UserModel MyDesktop.DealerModelに、同じファイルまたは script タグ内のその前のファイルに配置することもできます。requiresクラス定義のオプションによって、クラス定義が実際に実行される順序が変更される可能性があるため、これでも機能しない可能性があることに注意してください。繰り返しになりますが、最終的にはビルドプロセスが中断される可能性があります...

要するに、フレームワークの期待に応えようとしてはいけません。特に、クラス名とファイル システムの間の 1:1 マッピングが、ほぼすべての OO 言語で標準的な方法であると考えると...

于 2013-09-15T10:40:13.517 に答える