Faw*_*war 1 extjs sencha-touch-2 sencha-architect
在sencha文档中找不到关于此问题的任何相关信息:
是否可以Ext.create(...)使用不依赖于应用程序名称的参数进行调用?那么,如果我更改应用程序的名称,我不必重写那行代码?
通常情况下我会使用,Ext.create(AppName.model.MYMODEL)但这对我来说与应用程序的名称太相关了.
仍然需要帮助:)
当使用Ext.define来定义你的类,你可以提供一个alias属性.您可能已经在使用别名的UI组件上看到过这种情况widget.panel.这些别名可以使用Ext.create.
Ext.define('MyApp.SomeClass', {
alias: 'app.someclass', // Independent of class name
/* ... */
});
Ext.create('app.someclass', {
/* ... */
});
Run Code Online (Sandbox Code Playgroud)
您可以在使用后创建类的别名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', { /* ... */ });
Run Code Online (Sandbox Code Playgroud)
默认情况下,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);
});
};
Run Code Online (Sandbox Code Playgroud)
现在您已经拥有了这个,只需使用即可访问应用程序名称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();
}
Run Code Online (Sandbox Code Playgroud)