【问题标题】:Errors After Upgrading from EXTJS 4.2 to EXTJS 6.x从 EXTJS 4.2 升级到 EXTJS 6.x 后的错误
【发布时间】:2016-01-12 07:58:33
【问题描述】:

到目前为止,我已经通过两种方式完成了升级:

1) 我设置了一个新的sencha app generate [appName] 并将4.2 文件和目录转移到6.x。设置好之后,在做sencha app build时出错:

The following error occurred while executing this line:
/var/www/html/backoffice-test/EcommBackoffice/.sencha/app/build-impl.xml:381: The following error occurred while executing this line:
/var/www/html/backoffice-test/EcommBackoffice/.sencha/app/init-impl.xml:382: com.sencha.exceptions.ExNotFound: Unknown definition for dependency : Ext.ux.grid.filters.Filters
rareyes@MAKDL-RAREYES:/var/www/html/backoffice-test/EcommBackoffice$

除此之外,在加载应用程序时,控制台错误会显示以下几行:

http://localhost:1841/EcommBackoffice/Overrides/view/Table.js?_dc=1452581765612`
http://localhost:1841/EcommBackoffice/Overrides/selection/Model.js?_dc=1452581765612`
[E] [Ext.Loader] Some requested files failed to load.
[E] [Loader] The following classes failed to load:
[E] [Loader] Overrides.view.Table from Overrides/view/Table.js
[E] [Loader] Overrides.selection.Model from Overrides/selection/Model.js
[E] [Loader] EcommBackoffice.Application from app/Application.js

2) 被第一个卡住了,我的第二种方法是在现有应用程序上简单地做一个sencha app upgrade -ext。它成功更新,除非在执行sencha app build 时会发出类似的错误,例如:

The following error occurred while executing this line:
/var/www/html/backoffice-2.0/src/main/webapp/.sencha/app/build-impl.xml:381: The following error occurred while executing this line:
/var/www/html/backoffice-2.0/src/main/webapp/.sencha/app/init-impl.xml:382: com.sencha.exceptions.ExNotFound: Unknown definition for dependency : Ext.ux.grid.FiltersFeature

和一个简短的控制台错误:Uncaught ReferenceError: Ext is not defined

当我编辑 index.html 并替换 x-compile sn-p 时会发生这种情况:

<!-- <x-compile> -->

<!-- <x-bootstrap> -->
<link rel="stylesheet" href="bootstrap.css">
<script src="ext/ext-all-debug-w-comments.js"></script>
<script src="bootstrap.js"></script>
<!-- </x-bootstrap> -->
<script src="app.js"></script>

<!-- </x-compile> -->

到这里:

<script id="microloader" data-app="a32fd6d2-db0c-4c4b-a6a2-4185b3ee3fd4" type="text/javascript" src="bootstrap.js"></script>

在编辑 index.html 之前,x-compile 会引发不同的错误:

/.sencha/app/init-impl.xml:382: com.sencha.exceptions.ExBuild: Mixed-Mode x-compile and microload markup is currently unsupported

这就是我选择 6.x 提供的支持 Microloader 的原因

我在这里很迷茫。 ExtJS 显然没有合适的 Sencha 指南来直接从 4.x 升级到 6.x。它只进行了一级升级,例如 4.x 到 5.x,以及 5.x 到 6.x。即使那样,这些指南也不是很清楚,恕我直言,缺乏文档。

谁能指出我提供的错误的问题所在?

【问题讨论】:

  • 对于某些请求的文件加载失败的问题,请转到控制台并执行此行 --> Ext.Loader.missingQueue 并尝试找出重命名文件未加载的原因。Ext.Loader.missingQueue 会给你一个剩余文件的确切队列

标签: extjs extjs4.2 sencha-cmd extjs6


【解决方案1】:

嗯,Cmd 错误信息说得很清楚:

Unknown definition for dependency : Ext.ux.grid.filters.Filters

这意味着 ExtJS6 不提供Ext.ux.grid.filter.Filters,这是您的应用程序某处所必需的。

正如 Ext 文档所述,Ext.ux 命名空间中的所有内容都不是升级安全的,因为它是 Sencha 发现有用并添加到 Ext zip 文件中的用户提供的内容。通常,您只需在 Internet 上搜索官方 zip 文件中缺少的 ux 功能的可用 ExtJS 6.0.x 实现;或者自己写。

但是对于您的特殊情况,我相信他们将 gridfilters 从 ux 移到 ExtJS 4.2.x 的官方分支中,然后在 ExtJS 5 中删除了别名,最后,在 ExtJS 6 中,他们用插件替换了该功能。

所以请看一下Ext.grid.filters.Filters,我相信它可以满足您的需求,但您必须重写部分代码才能使用它。 (更改需求,将引用从功能移动到插件,可能会考虑其他更改。)

我认为第二个错误消息(“[E] [Ext.Loader] Some requested files failed to load.”)与第一个错误消息相同,我希望Overrides/view/Table.js中的requires:['Ext.ux.grid.filters.Filters'] . (Overrides.selection.Model 未加载,因为它需要 Overrides.view.Table,而 EcommBackoffice.Application 未加载,因为它引用 Overrides.selection.Model

【讨论】: