2

パネルの表示状態を保存しようとしています。Panel は、hbox/flex レイアウトとスプリッターを間に持つ 2 つの子コンテナーで構成されます。

{
  xtype:'panel',
  layout: {
    align: 'stretch',
    type: 'hbox'
  },
  items:[
    {
      xtype:'container',
      title: 'left panel',
      flex:1
    },
    {
      xtype:'splitter'
    },
    {
      xtype:'container',
      title: 'left panel',
      flex:2
    }
  ]
}

私はすでに作業状態マネージャーを持っています。「左側のパネル」にはグリッドが含まれており、グリッドは列の状態をうまく保存しています。状態マネージャーは、次の方法でコントローラーの init 関数から起動します。

var stateProvider=Ext.create('Ext.state.LocalStorageProvider');
Ext.state.Manager.setProvider(stateProvider);

グリッドは、stateId: 'GridState' および stateful:true を設定することにより、フレームワークの標準的なアプローチを使用して状態を保存します。

ただし、ExtJS がメイン レイアウトのフレックス値で同じことを行う方法を理解できません。スプリッターにステートフルとstateIdを設定してみました。イベントなしで、stateEvents: ['move'] で試しました。また、左パネルにステートフルを設定し、stateEvents を使用してサイズを変更しようとしました。最後に、stateEvents: afterlayout の有無にかかわらず、親パネルでステートフルを設定しようとしました。

スプリッターが移動された後にイベントをフェッチできることは知っています。次に、フレックス値をカスタム状態として保存し、レイアウト/レンダリング プロセスのどこかでそれらを手動で探すことができます。

hbox/vbox レイアウトの「スプリッタ位置」/「フレックス値」を格納するための標準的なフレームワーク アプローチは何ですか?

4

1 に答える 1

2

はい、状態を追加する標準的な方法があります。また、スプリッターにはデフォルトの状態がないため、次の関数を追加する必要があります。

状態の例:

getState: function () {
    var me = this;
    var state = {};
    state.yourCustomState = 'state'; //you can save what you want
    return state;
},

applyState: function (state) {
    var me = this;

    if (state && state.yourCustomState) {
        //Do stuff
    }
}

状態をトリガーする必要がある場合は、stateEvents を使用できます: http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.resizer.Splitter-method-addStateEvents

resize イベントを stateEvents に追加できます。

于 2013-05-06T10:05:50.467 に答える