多页应用程序 - EXT JS 6 - 软件包(404)

时间:2016-10-12 14:07:57

标签: javascript extjs extjs6 sencha-cmd

我有一个多页面应用程序,我已经从EXT JS 6(单页面应用程序)迁移到工作空间(ext JS 6)。

我已经拆分了一些常见的部分,比如我的应用程序标题和一些自定义输入组件。这些我已经放入一个包中(因为它们在我的工作空间中被多个'应用程序'访问。

我的问题是我有一个页面(工作空间应用程序)运行正常,找到它需要的所有文件并继续正常。

另一个页面(相同的工作空间,单独的应用程序)不起作用,它正在寻找404正在寻找文件(404-ing因为它在错误的目录中查找)

APP.JSON 我已经浏览了app.json文件并准确地告诉了它要使用的包。它在两种应用中都是相同的。

类路径 我没有触及任何一个应用程序的ClassPath。所以他们仍然是彼此相同的。

App 1(第1页)转到以下地址查找我的包裹中的文件:

http://localhost/App2/store/file.js

App 2(第2页)转到:

查找同一文件
sencha app refresh
sencha app build

我已经运行了sencha cmd并且没有任何错误

C:\Development\workspaces\e\e\app1>sencha app explain "testapp.store.Locale"
Sencha Cmd v6.2.0.46
[INF] Loading app json manifest...
[INF] Loading classes...
[INF] Gathering dependencies...
"edited"\sencha-compiler\app\full-page-master-bundle.js
    (@require file.js)
      --> e\app1\app.js
            e\app1\app.js:6 (Ext.require)
              (config)
                --> packages\local\page\src\store\Locale.js





C:\Development\workspaces\e\e\app2>sencha app explain "testapp.store.Locale"
    Sencha Cmd v6.2.0.46
    [INF] Loading app json manifest...
    [INF] Loading classes...
    [INF] Gathering dependencies...
        "edited"\sencha-compiler\app\full-page-master-bundle.js
        (@require file.js)
        --> e\app2\app.js
            e\app2\app.js:6 (Ext.require)
            (config)
            --> packages\local\page\src\store\Locale.js

我能想到的一切应该在这里有所作为,已经检查并重新检查;

所以提问时间:   - Sencha Cmd为什么/如何测试文件是否存在于特定位置?   - 在这种情况下为什么会出错呢?   - 我可能缺少哪些配置选项和问题?

编辑:

我刚刚找到并运行以下内容:

--compression-codec

看起来它告诉我App2在配置中有正确的路径......(感觉就像我发现了一个错误)

1 个答案:

答案 0 :(得分:2)

听起来像是在使用Ext.Loader配置遇到问题。从评论中,您似乎在包和测试应用程序中使用相同的根命名空间。问题是Ext.Loader会将命名空间映射到文件位置。得到错误的映射,你会看错了地方。

最简单的答案是确保包和应用程序在命名空间方面有所不同。这可能意味着更改前缀(例如MyPackageMyApp),或具有多级命名空间(MyStuff.package vs MyStuff.app)。后者是ExtJS本身的组织方式。

要查看的一个地方是应用的生成classic.json。此文件由引导过程使用,它包含它找到的所有类的列表,以及该类相对于应用程序所在的位置。 (我建议先做一些漂亮的打印格式化,因为它只是一行)。检查它是否有你正在寻找的班级名称,以及路径是什么。

...
"classes": {
    ...
    "Ext.Ajax": {
        "alias": [],
        "alternates": [],
        "idx": 43
    },
    ...
},
...
"loadOrder": {
    ....
    {
        "idx": 43,
        "path": "../ext-6.2.0/packages/core/src/Ajax.js",
        "requires": [
            42
        ],
        "uses": []
    },
    ....
},
...
"paths": {
    "Ext": "../ext-6.2.0/classic/classic/src",
    ....
    "Ext.Ajax": "../ext-6.2.0/packages/core/src/Ajax.js",
    ...
},
...

paths部分是关键部分。在上文中,了解命名空间(Ext)和文件(Ext.Ajax)的另一个命令。如果应用程序代码想要加载对paths部分中的类而不是的引用,它会在类命名空间中找到最长匹配并查找该目录。