【问题标题】:Overriding getState in ExtJS在 ExtJS 中覆盖 getState
【发布时间】:2014-09-26 19:23:35
【问题描述】:

我正在制作一个自定义 stateProvider,我想为我的面板状态保存一些额外的东西。我读到为了做到这一点,你必须做的是覆盖面板类的getState() 函数,但确保调用超类方法。我试过这样的事情:

initComponent: function () {
    Ext.apply(this, {
        getState: function() {
            this.superclass.getState.call();
            return {
                col: this.up().id,
                row: this.row,
                hidden: this.isHidden()
            };
        }
    });

    this.callParent(arguments)
}

但它似乎不起作用。我对如何应用超类方法感到困惑......

文档对组件的getState() 方法有以下说法:

实现更复杂状态的子类应该调用超类的实现,如果要保存这个基本状态,则将其状态应用于结果。

有什么我错的地方吗?

【问题讨论】:

    标签: javascript extjs overriding state superclass


    【解决方案1】:
    1. 直接在您的面板定义上覆盖getState
    2. 获取超级方法调用的结果并应用您的更改

      Ext.define('MyPanel', {
          ...
          getState: function() {
              var result = this.callParent(arguments);
              Ext.apply(result, {
                  col: this.up().id,
                  row: this.row,
                  hidden: this.isHidden()
              });
              return result;
          }
      })
      

    【讨论】:

    • 您的解决方案几乎解决了我的问题。现在一切正常,除了第一次创建面板但它在数据库中的状态记录仍然是空的。为了正确格式化记录,新创建的面板必须同时更改其宽度/折叠和位置(自定义状态内容)。我想这是为了同时调用 getState 函数并保存一些东西?例如,如果我仅更改其位置(自定义状态的东西),则数据库中的状态记录不会正确保存。
    • “没有正确保存”是什么意思?您可以在返回之前插入console.log(result) 以查看面板状态中的内容
    • 我解决了这个问题。本质上,面板仅在原始配置发生更改时才保存新状态。这意味着只有当面板的宽度/高度或折叠状态从其默认状态更改时,状态才会正确保存。否则它会保存一个空状态o%3A。我为解决这个问题所做的是,在 boxready 事件中,我以编程方式折叠和展开面板。这会强制状态再次保存所有参数,因为默认值发生了变化。如果我没有这样做,它会加载一个空状态并且无法 Ext.create 它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多