gpt4 book ai didi

extjs - 为什么我的 ExtJS 单例不起作用?

转载 作者:行者123 更新时间:2023-12-04 11:38:34 25 4
gpt4 key购买 nike

我有一个 ExtJS 单例类。

作为测试,我在 app.js launch() 函数中调用了它的一个方法。

但是没有定义单例静态方法。

我想当我需要类(class)时,单例会变得活跃吗?

Ext.Loader.setConfig({
enabled : true,
paths: {
'AM': 'app'
}
});


Ext.application({
name: 'AM',
autoCreateViewport: true,


requires: [
'AM.localization.ResourceManager'
],


controllers: [
'Users'
],


launch: function() {
alert(ResourceManager.initBundleLoader());
}
});




Ext.define('AM.localization.ResourceManager', {
alternateClassName: 'ResourceManager',
singleton: true,

init: function() {
this.initBundleLoader();
},

statics: {
test: 'here',
initBundleLoader: function() {
debugger;
Ext.applyIf(Ext.Loader, {
resourceBundles: new Object()
});
},

registerBundle: function(bundleName, locale) {
debugger;
if(!Ext.Loader.hasOwnProperty('resourceBundles')) {
this.initBundleLoader();
}
if(!Ext.Loader.resourceBundles.hasOwnProperty(bundleName)) {
if(Ext.ClassManager.isCreated('AM.locale.' + locale + '.resources.' + bundleName)) {
this.resourceBundles.bundleName = Ext.create('AM.locale.' + locale + '.resources.' + bundleName);
}
}
}
}
});

最佳答案

在 Ext JS 中,您可以将类定义为 singleton或使用 statics 定义普通类方法。您不能在单例中定义静态方法。

如果您将类定义为 singleton Ext JS 类后处理器会立即创建该类的实例,并在您的情况下将引用存储在 AM.localization.ResourceManager 中。 .然后你可以访问单例方法,如 AM.localization.ResourceManager.initBundleLoader()
您可以在此处的第三篇文章中找到具有静态方法的普通类和单例之间差异的良好解释:http://www.sencha.com/forum/showthread.php?128646-Singleton-vs-class-with-all-static-members

所以你的类定义应该是:

Ext.define('AM.localization.ResourceManager', {
alternateClassName: 'ResourceManager',
singleton: true,

init: function() {
this.initBundleLoader();
},

test: 'here',
initBundleLoader: function() {
debugger;
Ext.applyIf(Ext.Loader, {
resourceBundles: new Object()
});
},

registerBundle: function(bundleName, locale) {
debugger;
if(!Ext.Loader.hasOwnProperty('resourceBundles')) {
this.initBundleLoader();
}
if(!Ext.Loader.resourceBundles.hasOwnProperty(bundleName)) {
if(Ext.ClassManager.isCreated('AM.locale.' + locale + '.resources.' + bundleName)) {
this.resourceBundles.bundleName = Ext.create('AM.locale.' + locale + '.resources.' + bundleName);
}
}
}
});

关于extjs - 为什么我的 ExtJS 单例不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21596798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com