我有一系列名字
var names = ['X', 'Y']
对于我想创建类实例的每个名称,但仅当存在正确的js文件时,否则函数应返回null
getTool:function(name) { var t = Ext.create('VC.tools.' + name + 'Tool',{ map:this.map }); return t.getEntryPoint(); }
或许有没有办法实现某种尝试捕获?我只是不希望任何错误,如文件无法加载等。
编辑:
如果我添加try catch我可以避免不是构造函数错误。但仍然有文件不存在错误。有办法解决这个问题吗?
try { var t = Ext.create('VC.tools.' + name + 'Tool',{ map:this.map }); return t.getEntryPoint(); }catch(err){ return null; }
答案 0 :(得分:3)
在ClassManager上使用isCreated方法:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.ClassManager-method-isCreated
答案 1 :(得分:2)
您可能已经找到了解决方案,但万一它可能对其他人有帮助,您可以使用它:
if(Ext.ClassManager.getAliasesByName('[Classname to check]').length > 0) {
// create the requested component
var component = Ext.create('[Classname to check]');
// add replace the contents of the center container with the created component
centerContainer.removeAll();
centerContainer.add(component);
} else {
console.log('Uknown component: '+ '[Classname to check]');
}
它不会给你一个错误,如果它不存在,也不会尝试下载你的类文件。
答案 2 :(得分:2)
在我的情况下,我想要找到的类没有定义别名。我发现我可以使用它:
function createClassIfExists(name) {
var newClass;
if(!Ext.isEmpty(Ext.ClassManager.getNamesByExpression(name + '*')))
newClass = Ext.create(name);
return newClass;
}
答案 3 :(得分:0)
function openView(cid) {
shortName = cid.substr(cid.lastIndexOf(".")+1, cid.length);
if(Ext.get(shortName) == null) Ext.create(cid);
Ext.Viewport.setActiveItem(Ext.getCmp(shortName));
}
此功能打开一个类似
的视图openView('MyApp.view.Oeffnungszeiten');
如果View存在,则访问旧实例
答案 4 :(得分:0)
如果您正在使用' Ext.ClassManager' ,请注意查找是否存在类。以下代码仅适用于您的代码具有您要求的类别,并且需要使用'查看代码的一部分。
if(Ext.ClassManager.get('MyApp.view.Main'))
如果尚未添加,将返回 undefined 。
requires: [ 'MyApp.view.Main']
您也可以在' 视图' 部分的App.js中添加此内容。