Javascript Sencha CMD 5.x使用包装器js lib而不是Extjs 5.x有什么漏洞吗?
在extjs4.1.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; }
模型
,存储
,查看
,控制器
以及其他实用程序。因此,我的需求是通过我的定制/包装器库替换代码的锅炉板。关于以下代码:-
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构建错误。任何类型的引用都不支持onclassName
甚至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支付了许可证费用,您可以打开一张支持票来解释您的情况?