Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 如何正确使用Ext.create_Extjs_Sencha Touch 2_Sencha Architect - Fatal编程技术网

Extjs 如何正确使用Ext.create

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加载正确的文件,则需要将加载程序配置为符

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

是否可以使用不依赖于应用程序名称的参数调用
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设置字段和属性,除了模型中的函数之外,没有对其进行真正的编码。可能会有帮助