Extjs 配置选项与属性

Posted

技术标签:

【中文标题】Extjs 配置选项与属性【英文标题】:Extjs configoptions vs properties 【发布时间】:2013-03-26 18:24:27 【问题描述】:

Java 类具有用于操作这些属性的属性和方法。 ExtJS 类具有属性、方法和configOptions。 从概念上讲,configOptions 和属性有什么区别?为什么我们两者都需要?

【问题讨论】:

【参考方案1】:

据我了解……

configs - 在构造函数中传递,它定义了类的行为,configs 不应在运行时更改,因为它不会有任何效果,假设您需要为面板然后您可以添加配置,例如 title : 'some title' 将被面板用于在渲染时设置面板的标题,但之后,即使您尝试更改标题,也无法通过简单地更改该配置选项来更改属性。

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

更多信息

Sencha: Properties vs Configs, in the Ext 4 Documentation

我对这个问题的回答有点简单化和理想化。恐怕试图给出一个涵盖所有细节的完整答案更有可能增加混乱而不是澄清情况。

配置选项用于在创建对象时对其进行配置。在对象实例化后尝试将它们设置为对象的属性通常不会有任何效果。

Ext.create('Ext.panel.Panel', 
    // config options go here
);

一个对象会有很多属性,但只有在“属性”部分列出的那些才应该被视为公共属性。虽然没有什么可以阻止您访问私有属性,但您只能将其作为最后的手段,但请尽量使用记录在案的方法来操作它们。

// rendered is a public property used to indicate whether the panel has been rendered
if (panel.rendered) 
    // could just do panel.el but that isn't a public property, so use getEl instead
    var el = panel.getEl();
    ...

线条变得模糊的一个原因是对象通常像这样将它们的配置复制到自己身上:

Ext.apply(this, config);

这会导致所有配置选项成为私有属性,至少在最初是这样。然后,内部类可以适当地操作这些属性,但从外部访问这些属性是违反封装的,应该避免。

【讨论】:

谢谢。你能告诉我默认情况下这些属性是私有的还是公共的还是受保护的?还是这个概念只存在于java中而不存在于extjs中? extjs中有私有属性的概念,可以查看文档,私有属性是使用@private标签定义的,不过这只是为了说明,不像java或者C++那么严格,所以可以修改extjs 的私有属性,但你不应该这样做 默认属性是公开的

以上是关于Extjs 配置选项与属性的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs4 - 存储 baseParams 配置属性?

Extjs3 combobox使用

ExtJs控件属性配置详细

Extjs 与所有实例共享类配置

ExtJS 窗口动画目标

Extjs - 在属性网格中显示嵌套对象