在我的表格面板中,我添加了一个复选框,设置:
stateful: true,
stateId: 'loginPanelRemeberMe'
然后,在发送表单之前我保存状态调用:
this.saveState()
面板上的。所有其他组件保存其状态,当我重新加载他们回忆起以前状态的页面时,但是复选框始终以未选中状态启动。 有没有办法强制保存价值?
答案 0 :(得分:4)
这对我有用:
在Application启动功能(或控制器初始化功能)中,添加以下内容:
if( Ext.supports.LocalStorage )
{
Ext.state.Manager.setProvider(new Ext.state.LocalStorageProvider());
}
else
{
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
}
然后在视图中定义复选框并覆盖getState和applyState函数:
{
xtype: 'checkboxfield',
getState: function() {
return { "checked": this.getValue() };
},
applyState: function(state) {
this.setValue( state.checked );
},
stateEvents: [
'change'
],
stateId: 'myCheckBox',
stateful: true,
id: 'myCheckBox',
}
经测试可与ExtJS 4.2和6.5.x一起使用。
Sencha Architect用户注意事项:
如果您将视图定义为初始视图,则Sencha Architect会在您的启动函数之上自动添加隐藏的Ext.create行,如Ext.create('YourApp.view.MainPanel')
。这会产生不良影响,即在初始化状态提供程序之前实例化视图,因此你的字段applyState函数永远不会被调用。
解决方案:取消标记您的视图作为初始视图,并在初始化状态提供程序后手动添加Ext.create行。
答案 1 :(得分:0)
我发现的解决方案是这样的: 我整合了面板的状态功能,并添加了一个复选框状态字段。 //复选框状态的管理 记住我:假,
getState: function() {
var state = this.callParent();
state = this.addPropertyToState(state, 'rememberMe', this.rememberMe);
return state;
},
applyState: function(state) {
this.callParent(state);
this.getComponent('checkRememberMe').setValue(state.rememberMe);
},
在提交表单的方法中,我添加了以下行:
//Manage state
var checkRememberMe = this.getComponent('checkRememberMe');
if(checkRememberMe.getValue() == true){
this.rememberMe = checkRememberMe.getValue();
this.saveState();
}