【轉】Ext.state.Manager對組件狀態進行管理

Ext.state.Manager存在的意義:簡單說就是在客戶端存取數據,譬如說用戶打開一個Window之後對其大小進行了調整,他不想每次打開都要重新調整窗口大小,這時你就可以使用Ext.state.Manager記住他所設定的窗口大小,這樣他即使關閉瀏覽器再打開打那個Window還會是你所保存的大小。

默認情況下所有組件執行構造函數時都會訪問這個類。如果你想要讓它記住組件的狀態必須在程序初始化的時候設置一個Provider(一個可以對數據進行存取的底層實現),Ext提供的一個實現就是Ext.state.CookieProvider,這個類通過操作瀏覽器的cookie實現數據的存取,通常你需要在程序起始的時候對它進行設置。例如:

Ext.state.Manager.setProvider(
 new Ext.state.CookieProvider({
  expires: new Date(new Date().getTime()+(1000*60*60*24*365)), //1年保存期,默認是7天
 }));
 
在組件中使用狀態管理:
stateful:Boolean 
這個屬性只要不是false,這個組件就回在構造時訪問Ext.state.Manager
stateId:String
這個屬性是組件狀態化的標實,沒設置的話會被設置爲組件的id,如果組件id也沒手工設置,它會被設置爲null(如果想對組件進行狀態管理,這一項不能爲null)
stateEvents:Array
事件名的數組,其中任何事件觸發時Ext.state.Manager都會重新記錄組件的狀態
getState():Object
此方法用於保存組件狀態,當stateEvents中的事件觸發時會被調用,默認情況下是一個空方法;你需要改寫此方法返回一個帶有需要保存信息的直接量對象,這個對象會被Ext.state.Manager記錄下來並且做爲唯一參數傳遞給applyState方法。
applyState(Object state):void
如果stateful不爲false並且Ext.state.Manager保存了這個對象的狀態,這個方法會在組件構造時被隱式調用(不用你自己寫代碼,Ext會把當前組件的state對象做爲參數傳遞到這個方法並進行調用),默認情況下這個函數就是把state的所有屬性複製到這個對象上。

beforestaterestore、beforestatesave、staterestore、statesave四個事件可用來對狀態保存和讀取進行監聽

簡而言之,你至少需要爲需要狀態管理的組件配置以下屬性:
屬性:id或stateId stateEvents
方法:getState
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章