extjs - 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);
作为应用状态的第二行,但它不起作用。
解决方案
当设置以下配置选项时,组件是有状态的:
此外,要使状态保存工作,状态管理器的提供程序必须已设置为 Ext.state.Provider 的实现。
为了使此类有用,必须在应用程序初始化时使用提供程序对其进行初始化。
开箱即用有两个实现的提供程序:
有状态组合框的简单示例-小提琴
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);
}
}
因此getState
和setState
(使用值)方法是多余的
getState: function () {
return {
'value': this.getValue()
};
},
applyState: function (state) {
this.setValue(state.value);
}
旁注, in getState
/没有被称为父方法(看起来像是故意的),它使用来自Ext.Component的高度和宽度applyState
填充状态。