שמירה על סדר מיון בFLEX DataGrid

בעייה מעצבנת שקוראת בDataGrid של פלקס. כאשר ממיינים לפי עמודה ולאחר מכן מחליפים את הDataProvider, הסדר לא נשמר. כלומר המיון מתבצע רק בלחיצה על הכותרת אבל לא מתבצע שוב כשהprivder משתנה (מוחלף ליתר דיוק). כדי לעקוף זאת, כתבתי class נחמד שיורש מDataGrid ומטפל בבעייה. להלן הקוד:


package il.co.j2ee.samples {
import mx.controls.DataGrid;
import mx.events.CollectionEvent;
import mx.events.DataGridEvent;
import mx.events.FlexEvent;

public class SortedDataGrid extends DataGrid {
 private var lastSortingEvent:DataGridEvent;

 public function SortedDataGrid() {
 super();
 addEventListener("headerRelease", onHeaderRelease);
 }

 public override function set dataProvider(data:Object):void{
 super.dataProvider = data;
 addEventListener(CollectionEvent.COLLECTION_CHANGE, onDataChange);
 }

 private function onHeaderRelease(event:DataGridEvent):void{
 lastSortingEvent = event;
 }

 private function onDataChange(event:CollectionEvent):void{
 if (lastSortingEvent){
 dispatchEvent(lastSortingEvent);
 }
 }

}
}

כך זה נראה במקור:

וכך לאחר השימוש בSortedDataGrid:

שליטה על כפתורי הדפדפן (Browser) בFLEX

לעיתים, יש צורך למנוע מהמשתמש לצאת מהאפליקציה בו הוא נמצא או להזהיר אותו כשהוא עומד לעזוב את הדף. הבעיה שבפלקס דברים רבים נשמרים בClient ומשתמשים לא תמיד מודעים לכך שסגירת הדפדפן עלול להביא לאיבוד מידע. הקוד הבא מדגים כיצד ניתן להזהיר את המשתמש בעת לחיצה על Back, Forward, Refresh או סגירת הדפדפן (או הלשונית).

הקוד מבוסס ג'אווה סקריפט (JS) ויכול לשמש גם באפליקציות WEB רגילות.

הערה: הקוד נבדק ונמצא תומך על הדפדפנים הבאים:

  • IE 7 ומעלה
  • FireFox
  • Chrome

קוד הJavaScript שיש לכלול בדף שעוטף את הSWF:


<script type="text/javascript">
 var url = window.location;
 window.onhashchange = locationHashChanged;

 window.onbeforeunload = function(){
 return "All unsaved changes will be lost"
 }

 function locationHashChanged(){
 var currentUrl = window.location.href;
 if (currentUrl.indexOf('#c') == -1){
 var answer = confirm("Are you sure you want to leave this page? All unsave changes will be lost");
 if (answer){
 history.go(-1);
 }
 else{
 window.location = url+"#c";
 }
 }
 }

 </script>

דוגמא מלאה אפשר לראות כאן