Extjs 如何正确使用Ext.create
在sencha文档中找不到有关此问题的任何相关信息: 是否可以使用不依赖于应用程序名称的参数调用Extjs 如何正确使用Ext.create,extjs,sencha-touch-2,sencha-architect,Extjs,Sencha Touch 2,Sencha Architect,在sencha文档中找不到有关此问题的任何相关信息: 是否可以使用不依赖于应用程序名称的参数调用Ext.create(…)? 这样,如果我更改了应用程序的名称,我就不必重写那行代码了 通常我会使用Ext.create(AppName.model.MYMODEL),但对我来说,这与应用程序的名称联系太紧密了 仍然需要帮助:)您可以在Ext.create中使用任何类名,只要已经定义了该类,就没有强加命名约定。如果希望Ext.create使用Ext.loader加载正确的文件,则需要将加载程序配置为符
Ext.create(…)
?
这样,如果我更改了应用程序的名称,我就不必重写那行代码了
通常我会使用Ext.create(AppName.model.MYMODEL)
,但对我来说,这与应用程序的名称联系太紧密了
仍然需要帮助:)您可以在
Ext.create
中使用任何类名,只要已经定义了该类,就没有强加命名约定。如果希望Ext.create
使用Ext.loader
加载正确的文件,则需要将加载程序配置为符合所需的命名约定。您可以在Ext.create
中使用任何类名,只要已经定义了该类,就没有强加命名约定。如果希望Ext.create
使用Ext.loader
加载正确的文件,则需要将加载程序配置为符合所需的命名约定。使用类别名创建
使用Ext.define
定义类时,可以提供alias
属性。您可能已经在使用别名的UI组件(如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.application
时,Ext JS不保留对应用程序对象的引用,因此我们需要一个覆盖来完成此操作。我正在使用Ext.currentApp
作为存储此对象的属性,但您可以将其更改为您想要的任何内容
Ext.application = function (config) {
Ext.require('Ext.app.Application');
Ext.onReady(function () {
Ext.currentApp = new Ext.app.Application(config);
});
};
现在您已经有了这个功能,只需使用Ext.currentApp.name
即可访问应用程序名称。或者,如果你觉得使用getter更舒服,你可以使用下面的方法
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.define
定义类时,可以提供alias
属性。您可能已经在使用别名的UI组件(如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.application
时,Ext JS不保留对应用程序对象的引用,因此我们需要一个覆盖来完成此操作。我正在使用Ext.currentApp
作为存储此对象的属性,但您可以将其更改为您想要的任何内容
Ext.application = function (config) {
Ext.require('Ext.app.Application');
Ext.onReady(function () {
Ext.currentApp = new Ext.app.Application(config);
});
};
现在您已经有了这个功能,只需使用Ext.currentApp.name
即可访问应用程序名称。或者,如果你觉得使用getter更舒服,你可以使用下面的方法
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();
}
方法是:
您需要一个控制器,该控制器将在其初始化功能中(在UI加载/启动之前)执行以下操作
APPNAME = this.getApplication().getName();
Ext.create(APPNAME +'model.MyModel');
其中APPNAME是一个全局变量
然后,当您Ext.create时,您将能够编写以下内容
APPNAME = this.getApplication().getName();
Ext.create(APPNAME +'model.MyModel');
这样,您就可以更改应用程序名称,而无需检查代码中的所有位置,即可将每个Ext.create更改为新应用程序的名称
如果要使用此.getApplication().setName()来拥有无限缓存存储,它还可以为您提供这样的功能。如果每个AppName都有5/10mb的缓存存储空间,则可以使用此功能。方法:
您需要一个控制器,该控制器将在其初始化功能中(在UI加载/启动之前)执行以下操作
APPNAME = this.getApplication().getName();
Ext.create(APPNAME +'model.MyModel');
其中APPNAME是一个全局变量
然后,当您Ext.create时,您将能够编写以下内容
APPNAME = this.getApplication().getName();
Ext.create(APPNAME +'model.MyModel');
这样,您就可以更改应用程序名称,而无需检查代码中的所有位置,即可将每个Ext.create更改为新应用程序的名称
如果您要使用此.getApplication().setName()来拥有无限缓存存储,它还可以为您提供这种能力。如果每个AppName都有5/10mb的存储空间,您能否提供更多详细信息,我不太清楚。我已经用过Ext.define,Ext.loader了,所以你有点迷糊了。当然,你通常是如何定义你的类的?实际上,我用的是Sencha Architect,所以我想我的模型是由它自动定义的。我只是通过Architect的UI设置字段和属性,除了模型中的函数之外,没有对其进行真正的编码。可能有点帮助,我在之前的评论中漏掉了一个词,我还没有(手动)使用Ext.define和Ext-loader。对不起,我对架构师一无所知。。也许再发一个问题,贴上sencha-architect的标签。你能给我更多的细节吗,我不太确定是否会跟进。我已经用过Ext.define,Ext.loader了,所以你有点迷糊了。当然,你通常是如何定义你的类的?实际上,我用的是Sencha Architect,所以我想我的模型是由它自动定义的。我只是通过Architect的UI设置字段和属性,除了模型中的函数之外,没有对其进行真正的编码。可能会有帮助