1

在 sencha 文档中找不到有关此问题的任何相关信息:

是否可以Ext.create(...)使用不依赖于应用程序名称的参数进行调用?这样,如果我更改应用程序的名称,我就不必重写那行代码?

通常我会使用Ext.create(AppName.model.MYMODEL),但这对我来说太依赖于应用程序的名称。

仍然需要帮助:)

4

3 回答 3

6

使用类别名创建

用于Ext.define定义您的类时,您可以提供一个alias属性。您可能已经在使用别名(如widget.panel. 这些别名可以与Ext.create.

Ext.define('MyApp.SomeClass', {
    alias: 'app.someclass',  // Independent of class name
    /* ... */
});

Ext.create('app.someclass', {
    /* ... */
});

您可以在使用创建类后为其设置别名Ext.ClassManager.setAlias

使用应用程序名称的辅助函数

如果您没有设置别名的选项,您可以创建一个包装函数,该函数Ext.create自动提供您的基本命名空间。

这里的问题是Ext.application不返回应用程序对象。我不确定 Sencha Architect 如何生成应用程序代码,但您可能需要额外的覆盖以允许您检索应用程序对象。

function appCreate(className, config) {
    var appName = someMethodThatGetsTheApplicationName();
    return Ext.create(appName + '.' + className, config);
};

// Example usage: Creates object of MyApp.model.MyModel
var myObj = appCreate('model.MyModel', { /* ... */ });

如何在运行时获取应用程序名称

默认情况下,Ext JS 在使用时不保留对应用程序对象的引用Ext.application,所以我们需要一个覆盖来做到这一点。我将Ext.currentApp其用作存储此对象的属性,但您可以将其更改为您想要的任何内容。

Ext.application = function (config) {
    Ext.require('Ext.app.Application');

    Ext.onReady(function () {
        Ext.currentApp = new Ext.app.Application(config);
    });
};

现在您有了这个,您可以通过简单地使用来访问应用程序名称Ext.currentApp.name。或者,如果您觉得使用吸气剂更舒服,您可以使用以下方法。

Ext.app.Application.addMembers({
    getName: function () {
        return this.name;
    }
});

// Example usage:
function someMethodThatGetsTheApplicationName() {
    if (!Ext.currentApp) {
        Ext.Error.raise('Current app does not exist.');
    }
    return Ext.currentApp.getName();
}
于 2013-06-10T20:19:20.083 回答
1

Ext.create只要已经定义了类,您就可以使用任何类名,因为那里没有强加命名约定。如果您想Ext.create使用加载正确的文件,Ext.loader您需要配置加载程序以符合您需要的命名约定。

于 2013-06-07T19:25:39.850 回答
1

这样做的方法:

您需要一个控制器,它将在它的INIT 功能中(在 UI 加载/启动之前)执行以下操作

APPNAME = this.getApplication().getName();

其中 APPNAME 是一个全局变量。

然后,当您 Ext.create 某些内容时,您将能够编写以下内容

Ext.create(APPNAME +'model.MyModel');

这样您就可以更改您的应用程序名称,而无需检查代码中的任何地方以将每个 Ext.create 更改为新应用程序的名称。

如果您要使用 this.getApplication().setName() 来拥有无限的缓存存储,它还使您能够获得每个 AppName 的 5/10mb。

于 2013-06-11T14:02:27.920 回答