3

我有一系列名字

变量名称 = ['X', 'Y']

对于每个名称,我想创建类实例,但前提是存在正确的 js 文件,否则函数应返回 null

    获取工具:功能(名称){

        var t = Ext.create('VC.tools.' + name + 'Tool',{
            地图:this.map
        });

        返回 t.getEntryPoint();
}

或者也许有办法实现某种尝试捕获?我只是不希望出现任何错误,例如无法加载文件等。

编辑:

如果我添加 try catch 我可以避免不是构造函数错误。但仍然得到文件不存在错误。有没有办法处理这个?

    尝试 {
                var t = Ext.create('VC.tools.' + name + 'Tool',{
                    地图:this.map
                });

                返回 t.getEntryPoint();

            }捕捉(错误){
                返回空值;
            }

4

5 回答 5

3

在 ClassManager 上使用 isCreated 方法:http ://docs.sencha.com/ext-js/4-1/#!/api/Ext.ClassManager-method-isCreated

于 2012-11-16T00:02:53.223 回答
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]');
}

如果它不存在,它不会给你一个错误,也不会尝试下载你的类文件。

于 2013-12-27T18:27:34.217 回答
2

就我而言,我要查找的类没有定义别名。我发现我可以使用这个:

function createClassIfExists(name) {
    var newClass;

    if(!Ext.isEmpty(Ext.ClassManager.getNamesByExpression(name + '*')))
        newClass = Ext.create(name);

    return newClass;
}
于 2014-02-26T14:23:12.067 回答
1

如果您使用“Ext.ClassManager”,请注意查找类是否存在的警告。下面的代码仅在您的代码具有您在查看代码的“要求”部分中查找的类时才有效。

if(Ext.ClassManager.get('MyApp.view.Main'))

如果尚未添加,它将返回undefined 。

requires: [ 'MyApp.view.Main']

您也可以在“视图”部分中将其添加到您的 App.js 中。

于 2016-07-26T18:43:01.547 回答
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');

如果视图存在,它会访问旧实例

于 2013-05-16T13:37:06.373 回答