ExtJS - 通过在应用程序中扩展类来创建包

时间:2016-01-08 22:10:52

标签: build extjs5 sencha-cmd

这可能吗?例如,myOpenGL是一个包,openGL是一个应用。

我想做这样的事情:

Ext.define('myOpenGL.view.Qxga',{
    extend: 'openGL.view.Uxga',
    alias: 'widget.qxga',
    itemId: 'qxga',
    requires: [
            'openGL.view.Uxga',
            'myOpenGL.view.QxgaController'
    ],
    controller: 'QxgaController'
});

这是文件的组织方式(为清晰起见,省略了大多数文件):

workspace/
    packages/
        myOpenGL/
            .sencha/
            src/
                view/
                    qxga.js <--- the file defining QXGA
            package.json
            build.xml
    openGL/
        .sencha/
            app/            <--- errors are being generated from here?              
        app/
            view/
                 uxga.js    <--- the file with the class I want to extend
        app.json
        build.xml
        ...

现在我得到了未解决的依赖项错误,但它们似乎是从应用程序生成而不是包(请参阅The following error...之后):

[ERR] Failed to resolve dependency openGL.view.Uxga for file myOpenGL.view.Qxga
[ERR]
[ERR] BUILD FAILED
[ERR] com.sencha.exceptions.ExNotFound: Unknown definition for dependency : openGL.view.Uxga
[ERR]
[ERR] Total time: 6 seconds
[ERR] The following error occurred while executing this line:
C:\Users\«username»\Applications\Sencha\Cmd\5.1.0.26\plugins\ext\current\plugin.xml:403: The following error occurred while executing this line:
C:\Users\«username»\Documents\workspace\openGL\.sencha\app\build-impl.xml:378: The following error occurred while executing this line:
C:\Users\«username»\Documents\workspace\openGL\.sencha\app\init-impl.xml:303: com.sencha.exceptions.ExNotFound: Unknown definition for dependency : openGL.view.Uxga

有些问题:

  • 为什么错误来自workspace\openGL\.sencha\app?它是packages\myOpenGL我正在努力建立。我希望init-impl.xml packages发出错误。
  • 我无法修改openGL/app,必须按原样使用,但可以修改packages中的任何内容。此外,我无法移动openGL,但可以在packages中创建快捷方式,也可以在openGL/overrides中创建替换。知道了,我有办法让这个工作吗?

1 个答案:

答案 0 :(得分:2)

通常,在较高的层次上,构建过程不是:包,然后是包覆盖,然后是应用,然后是应用覆盖。如果您的软件包正在引入应用程序代码,那么它理论上最终会因为依赖性而拉动所有应用程序,从而搞乱构建过程。也许这就是为什么你会看到来自应用程序的错误。

一种解决方案是将您需要的应​​用程序代码复制到程序包中,更改名称空间,限制依赖项,并以这种方式使用它。

另一个解决方案是让应用提供商重新组织您需要的功能包!也就是说,重复使用可重复使用的内容。

在任何一种情况下,这都是很多工作,但糟糕的设计总会让你感到伤心!