Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sencha CMD 5.x使用包装器js lib而不是Extjs 5.x有什么漏洞吗?_Javascript_Extjs_Cmd_Sencha Touch_Extjs5 - Fatal编程技术网

Javascript Sencha CMD 5.x使用包装器js lib而不是Extjs 5.x有什么漏洞吗?

Javascript Sencha CMD 5.x使用包装器js lib而不是Extjs 5.x有什么漏洞吗?,javascript,extjs,cmd,sencha-touch,extjs5,Javascript,Extjs,Cmd,Sencha Touch,Extjs5,在extjs4.1.x方面,我能够使用自定义/包装库来操作模型,存储,查看,控制器以及其他实用程序。因此,我的需求是通过我的定制/包装器库替换代码的锅炉板。关于以下代码:- var Lib = Lib || { $class : 'Lib', $package : 'Default', version : '1.0.00', getName : function(){ return Lib.$class; }

extjs4.1.x方面,我能够使用自定义/包装库来操作
模型
存储
查看
控制器
以及其他实用程序。因此,我的需求是通过我的定制/包装器库替换代码的锅炉板。关于以下代码:-

var Lib = Lib || {
    $class      : 'Lib',
    $package    : 'Default',
    version     : '1.0.00',
    getName     : function(){
        return Lib.$class;
    },
    define      : function(name, config){
        return Ext.define(name, config);
    }   
};
是我的自定义库,现在我想替换以下代码

Ext.define('Myapp.view.main.MainModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.main',
    data: {
        name: 'Myapp'
    }
});
如下所示,Extjs代码的替换/包装:

Lib.define('Myapp.view.main.MainModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.main',
    data: {
        name: 'Myapp'
    }
});
但是这里有一个问题导致Sencha CMD 5.x构建错误,以前版本的Sencha SDK、CMD支持使用第三方库只需在
index.html

<script id="extwrapper" type="text/javascript" src="Lib.js"></script
仍然显示Sencha CMD 5.x构建错误。任何类型的引用都不支持on
className
甚至java脚本闭包/内联函数。比如说

Ext.define((function(){ return 'Myapp.view.main.MainModel';})(), {
    extend: 'Ext.app.ViewModel',
    alias: alias,
    data: {
        name: 'Myapp'
    }
});
data
上,它支持简单的java脚本闭包/内联函数,但不支持引用。比如说

Ext.define( 'Myapp.view.main.MainModel', (function(){ 
    return {
        extend: 'Ext.app.ViewModel',
        alias: 'viewmodel.main',
        data: {
            name: 'Myapp'
        }
    }   
})());
Ext.define( 'Myapp.view.main.MainModel', (function(){ 
    var data = {
        extend: 'Ext.app.ViewModel',
        alias: 'viewmodel.main',
        data: {
            name: 'Myapp'
        }
    };
    return  data;
})());
即使我要使用简单的引用,它也不起作用。比如说

Ext.define( 'Myapp.view.main.MainModel', (function(){ 
    return {
        extend: 'Ext.app.ViewModel',
        alias: 'viewmodel.main',
        data: {
            name: 'Myapp'
        }
    }   
})());
Ext.define( 'Myapp.view.main.MainModel', (function(){ 
    var data = {
        extend: 'Ext.app.ViewModel',
        alias: 'viewmodel.main',
        data: {
            name: 'Myapp'
        }
    };
    return  data;
})());
如上所述,代码的构建失败

Sencha Cmd v5.0.2.270
[INF] Processing Build Descriptor : default
[INF] Loading app json manifest...
[WRN] C1003: Unsupported Ext.define syntax (function does not return object lite
ral) -- g:\js\extjs\myapp\app\view\main\MainModel.js:1
[WRN] C1003: Unsupported Ext.define syntax (function does not return object lite
ral) -- g:\js\extjs\myapp\app\view\main\MainModel.js:1
[ERR] C2008: Requirement had no matching files (Myapp.view.main.MainModel) -- g:\j
s\extjs\myapp\app\view\main\Main.js:12:50
[ERR]
[ERR] BUILD FAILED
[ERR] com.sencha.exceptions.ExBuild: Failed to find any files for g:\js\extjs\my
app\app\view\main\Main.js::ClassRequire::Myapp.view.main.MainModel
[ERR]
[ERR] Total time: 7 seconds
[ERR] The following error occurred while executing this line:
g:\js\extjs\myapp\.sencha\app\build-impl.xml:376: The following error occurred whi
le executing this line:
g:\js\extjs\myapp\.sencha\app\init-impl.xml:292: com.sencha.exceptions.ExBuild: Fa
iled to find any files for g:\js\extjs\myapp\app\view\main\Main.js::ClassRequire::
Myapp.view.main.MainModel
问题在哪里?Extjs 4.1.3在早期版本Sencha SDK/CMD中没有任何限制。但他们为什么要添加这样的功能呢

通过Extjs-4.1.3,我能够像下面那样编写和编译代码

Ext.define(Lib.view.getAbsView('V01I001001X01'), {
    extend      : 'Ext.form.Panel',
    alias       : Lib.app.getAlias('V01I001001X01'),
    id          : 'V01I001001X01'.toLowerCase(), 
    bodyStyle   : {
        background  : 'none'
    },
    defaults    : {        
        //TODO
    },
    initComponent: function() {
        var me     = this;
        //TODO
        me.callParent(arguments);
    }
});
Ext.define('Myapp.view.m01001.m0i001.v01i001001.V01I001001X01'), {
    extend      : 'Ext.form.Panel',
    alias       : 'widget.v01i001001x01'
    id          : 'v01i001001x01',
    bodyStyle   : {
        background  : 'none'
    },
    defaults    : {        
        //TODO
    },
    initComponent: function() {
        var me     = this;
        //TODO
        me.callParent(arguments);
    }
});
哪一个工作起来像下面的硬代码

Ext.define(Lib.view.getAbsView('V01I001001X01'), {
    extend      : 'Ext.form.Panel',
    alias       : Lib.app.getAlias('V01I001001X01'),
    id          : 'V01I001001X01'.toLowerCase(), 
    bodyStyle   : {
        background  : 'none'
    },
    defaults    : {        
        //TODO
    },
    initComponent: function() {
        var me     = this;
        //TODO
        me.callParent(arguments);
    }
});
Ext.define('Myapp.view.m01001.m0i001.v01i001001.V01I001001X01'), {
    extend      : 'Ext.form.Panel',
    alias       : 'widget.v01i001001x01'
    id          : 'v01i001001x01',
    bodyStyle   : {
        background  : 'none'
    },
    defaults    : {        
        //TODO
    },
    initComponent: function() {
        var me     = this;
        //TODO
        me.callParent(arguments);
    }
});

问题的一部分在于Sencha命令不仅运行JavaScript,它还解析和编译它,以便做很多“聪明”的事情。这意味着对代码的形成方式有一些限制。见:

您有以下代码:

Ext.define( 'Myapp.view.main.MainModel', (function(){ 
    return {
        extend: 'Ext.app.ViewModel',
        alias: 'viewmodel.main',
        data: {
            name: 'Myapp'
        }
    }   
})());
CMD似乎正在解析第二个参数,并将其视为对象文字以外的内容(这很有意义,因为它不是,它是一个函数)。显然,以下方法会起作用:

Ext.define( 'Myapp.view.main.MainModel', {
        extend: 'Ext.app.ViewModel',
        alias: 'viewmodel.main',
        data: {
            name: 'Myapp'
        }
});

我不明白你为什么要使用第一种形式,它似乎比标准方法没有优势。不管怎样,您最好尝试使用Ext JS和CMD,而不是绕过这个问题。

您看到的Sencha命令生成错误是什么?顺便说一句,这太可怕了,我不知道你为什么要在现实世界中这样做。我只是编辑了文章,为你的观察附加了错误日志。你有没有想过放弃Sencha命令的使用?你可以把你的脚本放在网页上,或者用任何其他的js缩小工具打包。因为我想根据我的业务需求操作
className
data
,同时减少
代码的锅炉板@colinramsay你在标记什么?它只是不同的方法,但我的目标在我的帖子顶部。你的替代方法不允许你做Ext JS尚未提供的任何事情-至少在我看来是这样。如果你想提供一个更详细的例子来说明你想要实现什么,那么它可能会更清晰。因此,我的代码毫无疑问是用Extjs 4.1.3以及以前版本的编译器实现的
extjs5.x
迫使我们服从他们的特性,这会导致痛苦的经历。我们有写代码的自由我们讨厌Sencha Extjs团队限制我们写代码的自由。我建议你阅读我在回答中的链接,因为这为你的问题提供了一个潜在的解决方法。很遗憾,您不得不对创建此软件的团队表示如此愤怒,我是否可以建议,既然您显然已经为Ext JS支付了许可证费用,您可以打开一张支持票来解释您的情况?