首页 > 解决方案 > ExtJs Combobox 有值但显示为空

问题描述

我有状态组合框,其中包含从状态中获取的值,如下所示:

getState: function () {
    return {
        'value': this.getValue()
    };
},

applyState: function (state) {
    this.setValue(state.value);
}, 

如果我选择组合框的选项之一,关闭我的应用程序,再次打开它,当 getState() 被调用时,组合框仍然有这个选定的值。我什至可以在 afterRender 调用的事件中传递它:

afterrender: function (combo) {
        this.fireEvent('someEvent', combo.getValue());
    }

并且正确通过了。一切看起来都很好。除此之外,最初的组合框在实际上具有价值时看起来像是空的。我怎样才能解决这个问题?我试过了

this.setRawValue(state.value); 

作为应用状态的第二行,但它不起作用。

标签: extjs

解决方案


当设置以下配置选项时,组件是有状态的:

  • stateId:此对象用于状态管理目的的唯一 ID。
  • stateful:一个标志/对象,它使对象在启动时尝试从保存的状态恢复内部属性的状态。

此外,要使状态保存工作,状态管理器的提供程序必须已设置为 Ext.state.Provider 的实现。

分机状态管理器

为了使此类有用,必须在应用程序初始化时使用提供程序对其进行初始化。

开箱即用有两个实现的提供程序:

  1. Ext.state.CookieProvider
  2. Ext.state.LocalStorageProvider

有状态组合框的简单示例-小提琴


Ext.form.field.ComboBox延伸Ext.form.field.Picker延伸Ext.form.field.Text

文本字段已添加value到其状态:

getState: function() {
    return this.addPropertyToState(this.callParent(), 'value');
},
 
applyState: function(state) {
    this.callParent([state]);

    if (state.hasOwnProperty('value')) {
        this.setValue(state.value);
    }
}

因此getStatesetState(使用值)方法是多余的

getState: function () {
    return {
        'value': this.getValue()
    };
},

applyState: function (state) {
    this.setValue(state.value);
}

旁注, in getState/没有被称为父方法(看起来像是故意的),它使用来自Ext.Component的高度宽度applyState填充状态。


推荐阅读