如何创建单例类以及如何在 EXJS 中使用它

问题描述 投票:0回答:1

我有以下单例类,我认为它已正确创建。我试图从中检索一个值,但我一直得到未定义的返回值。请有人建议吗?

Ext.define('MyApp.PdfDrawRect', {
singleton: true,
config: {
    zoomValue: 1
},
constructor: function (config) {
    this.initConfig(config);
    return this;
},

setZoomValue: function (value) {
    console.log('setZoomValue');
    MyApp.PdfDrawRect.zoomValue = value;


},

getZoomValue: function () {
    console.log('getZoomValue');
    return this.zoomValue;
}
});

用法

MyApp.getZoomValue() // 这个返回 'undefined'

extjs
1个回答
0
投票

你得到一个未定义的异常有两个原因。 MyApp.getZoomValue() 是未定义函数,因为 MyApp 对象未定义。完全限定的对象名称有两个级别。

第一行实例化类对象。第二行调用该类对象的函数。

var theObject = Ext.create('MyApp.PdfDrawRect');
theObject.getZoomValue();

var MyApp1 = Ext.create('MyApp.PdfDrawRect');
MyApp1.getZoomValue();

评论中的问题:

你构建的是一个配置。你想要的是一个财产。它们相似但不同。搜索属性的 ExtJS 示例以及如何构建 getter 和 setter。

configs - 在构造函数中传递,它定义了 类,配置不应在运行时更改,因为它不会 有什么影响,假设你需要为面板指定一个标题 然后你可以添加一个配置,例如{ title : 'some title' } 这将是 由面板用于在渲染时设置面板的标题,但之后 也就是说,即使您尝试更改标题,也不能通过以下方式更改属性 只需更改该配置选项即可。

properties - 用于存储对此有用的信息 类,这通常不通过构造函数传递,但应该有 getter 和 setter 方法,您可以在运行时更改属性(如果 setter 方法被定义)并且类对象应该检测到这个变化, 也可以有只读属性,这些属性由类修改 只有对象我们不应该改变它。

https://docs-devel.sencha.com/extjs/7.2.0/guides/core_concepts/classes.html

查看属性“name”是如何在链接的“声明”部分下的代码块中定义的。

一旦你有了 name 属性,你就可以像这样调用默认的 getter:

theObject.name = 'JohnDoe';

然后像这样调用设置器:

nameVal = theObject.name;

或者您可以通过构建自己的函数来覆盖 getter 或 setter。但是该功能不能像您那样是自定义名称。

另一方面,您可以将这些保留为配置。请参阅此示例。您可以使用配置而不是属性来模仿 getter 和 setter。

https://www.extjs-tutorial.com/extjs/config

© www.soinside.com 2019 - 2024. All rights reserved.