1

フォーム パネルにチェックボックスを追加し、次のように設定しました。

stateful: true,
stateId: 'loginPanelRemeberMe'

次に、フォームを送信する前に、状態呼び出しを保存します。

this.saveState()

パネル上。他のすべてのコンポーネントは状態を保存し、ページをリロードすると以前の状態が呼び出されますが、チェックボックスは常にチェックされていない状態で始まります。値を強制的に保存する方法はありますか?

4

2 に答える 2

4

これは私のために働く:

アプリケーションの起動関数 (またはコントローラーの init 関数) で、次を追加します。

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 ユーザーへの注意: ビューを初期ビューとして定義すると、Ext.create('YourApp.view.MainPanel')Sencha Architect によって起動関数の上に Ext.create のような非表示の行が自動的に追加されます。これにより、状態プロバイダーを初期化する前にビューをインスタンス化するという望ましくない効果が生じるため、フィールドの applyState 関数が呼び出されることはありません。

解決策:ビューを初期ビューとしてマーク解除し、状態プロバイダーが初期化された後に Ext.create 行を手動で追加します。

于 2013-05-14T12:38:20.823 に答える
0

私が見つけた解決策は次のとおりです。パネルの状態関数をovverridedし、チェックボックスのステータスフィールドを追加しました。//チェックボックスの状態の管理rememberMe:false、

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();
}
于 2012-10-18T16:03:00.313 に答える