在 sencha 文档中找不到有关此问题的任何相关信息:
是否可以Ext.create(...)
使用不依赖于应用程序名称的参数进行调用?这样,如果我更改应用程序的名称,我就不必重写那行代码?
通常我会使用Ext.create(AppName.model.MYMODEL)
,但这对我来说太依赖于应用程序的名称。
仍然需要帮助:)
在 sencha 文档中找不到有关此问题的任何相关信息:
是否可以Ext.create(...)
使用不依赖于应用程序名称的参数进行调用?这样,如果我更改应用程序的名称,我就不必重写那行代码?
通常我会使用Ext.create(AppName.model.MYMODEL)
,但这对我来说太依赖于应用程序的名称。
仍然需要帮助:)
用于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();
}
Ext.create
只要已经定义了类,您就可以使用任何类名,因为那里没有强加命名约定。如果您想Ext.create
使用加载正确的文件,Ext.loader
您需要配置加载程序以符合您需要的命名约定。
这样做的方法:
您需要一个控制器,它将在它的INIT 功能中(在 UI 加载/启动之前)执行以下操作
APPNAME = this.getApplication().getName();
其中 APPNAME 是一个全局变量。
然后,当您 Ext.create 某些内容时,您将能够编写以下内容
Ext.create(APPNAME +'model.MyModel');
这样您就可以更改您的应用程序名称,而无需检查代码中的任何地方以将每个 Ext.create 更改为新应用程序的名称。
如果您要使用 this.getApplication().setName() 来拥有无限的缓存存储,它还使您能够获得每个 AppName 的 5/10mb。