אכסון מידע מקומי באמצעות ShareObjects

המאמר הקודם במדריך ה-AS3
המאמר הבא במדריך ה-AS3

במאמר הקודם למדנו איך לתקשר עם JavaScript באמצעות ActionScript 3. במאמר הזה נלמד איך לאכסן מידע מקומי באמצעות פלאש ו-ActionScript 3.

הדרך הטובה ביותר לאכסן מידע עבור אפליקצית הפלאש שלנו, מלבד השרת, היא באמצעות ShareObjects. מדובר באכסון מידע ייחודי לפלאש שאינו מאוכסן בזכרון המטמון או בעוגיות. חשוב לציין כי רמת האבטחה של ShareObjects נמוכה יחסית ויש לאכסן שם רק מידע שהייתם מאכסנים על עוגיות. בנוסף ישנם משתמשים שמונעים שמירה של מידע על המחשב האישי שלהם.

אחרי כל זה, בואו ונתחיל. אני אצור לנו דוגמא, בדוגמא יהיו שלושה sprite ותיבת טקסט אחת. לחיצה על sprite אחד תכניס את המידע בתיבת הטקסט לתוך ShareObject שנקבע, לחיצה על ה-sprite השני תנקה את ה-ShareObject ולחיצה על ה-sprite השלישי תעביר את המידע מה-ShareObjects לתיבת הטקסט. ככה הקוד נראה, שימו לב להערות:


package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.geom.*;
	import flash.external.*;
	import flash.text.*;

	public class SharedObjectsForm {
		private var myStage;
		private var startingX:Number = 10;
		private var m_textToBeInsterted:TextField = new TextField();

		public function SharedObjectsForm(myStage) {
			this.myStage = myStage;
			this.m_textToBeInsterted.type = "input";
			this.m_textToBeInsterted.x = 10;
			this.m_textToBeInsterted.y = 10;
			m_textToBeInsterted.height = 20;
			this.m_textToBeInsterted.border = true;
			this.m_textToBeInsterted.borderColor = 0x0000FF;
			this.myStage.addChild(m_textToBeInsterted);
			
			createButton('הכנסה');
			createButton('מחיקה');
			createButton('טעינה');

		}
		private function createButton(buttonText:String) 
		{
			/* Creating Sprite */
			this.startingX+=20;
			var m_animSprite:Sprite = new Sprite();
			m_animSprite.graphics.beginFill(0x000000);
			m_animSprite.graphics.drawRect(startingX, 100, 50, 50);
			m_animSprite.graphics.endFill();
			this.myStage.addChild(m_animSprite);
			
			/* Creating text Field */
			var myTextField:TextField = new TextField();
			myTextField.text = buttonText;
			myTextField.textColor = 0xFF0000;
			myTextField.x = startingX+5;
			myTextField.y = 100;
			this.myStage.addChild(myTextField);
			
			this.startingX+=100;
			/* Adding event handlers */
			switch (buttonText)
			{
				case "הכנסה":
				myTextField.addEventListener(MouseEvent.CLICK, insertToShareObject);
				break;
				case "מחיקה":
				myTextField.addEventListener(MouseEvent.CLICK, deleteFromShareObject);
				break;
				case "טעינה":
				myTextField.addEventListener(MouseEvent.CLICK, callFromShareObject);
				break;
				default:
				trace ("Error")
			}
			
		}
		private function insertToShareObject(ev:Event)
		{
			//In this function m_textToBeInsterted.text will be inserted to ShareObject
		}
		private function deleteFromShareObject(ev:Event)
		{
			//In this function the ShareObject content will be deleted
		}
		private function callFromShareObject(ev:Event)
		{
			//This function will display the data in ShareObject
		}
	}
}

אין לי יותר מדי מה להסביר על הקוד הזה כיוון שאת כולו כיסינו במאמר על טקסט ב-ActionScript 3, במאמר על Sprite ב-ActionScript 3 ובמאמר על אירועים ב-ActionScript 3.

ראשית עלי ליצור את אובייקט ShareObject ואת זה אני עושה כמו כל אובייקט רגיל.
var myStorage:SharedObject = SharedObject.getLocal("myStorage");

myStorage הוא השם שבחרתי לאובייקט, כמובן שניתן לבחור כל שם כל הוא בלי רווחים ותווים מוזרים. חשוב מאד – יש צורך לעשות import ל-flash.net.* אחרת זה לא יעבוד.

אחרי שיצרנו את האובייקט, אנחנו צריכים לפנות אל מתודות הכתיבה, הקריאה והמחיקה שלו.

כתיבה

כתיבה היא פשוטה מאד, אם אנו מניחים ששם האובייקט הוא myStorage אז זה הולך כך:
myStorage.data.myData= whatever;
כש-whatever הוא משתנה/מערך או אובייקט ו-myData הוא שם התכונה של myStorage. כמובן שאפשר לקרוא ל-myData באיזה שם שרוצים.

קריאה

גם קריאה היא פשוטה יחסית. פשוט קריאה ל-myStorage.data.myData.

מחיקה

יש שני סוגי מחיקה – מחיקה רגילה של חלק מהאובייקט (זו שבדרך כלל משתמשים בה) ועושים את זה על ידי:
delete myStorage.data.myData

סוג המחיקה השני מוחק לחלוטין את כל האובייקט והקובץ שלו ולא מותיר לו זכר. פשוט משתמשים במתודת clear של האובייקט.
myStorage.clear()

ועכשיו לדוגמא:


package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.geom.*;
	import flash.external.*;
	import flash.text.*;
	import flash.net.*;

	public class SharedObjectsForm {
		private var myStage;
		private var startingX:Number = 10;
		private var m_textToBeInsterted:TextField = new TextField();
		private var myStorage:SharedObject = SharedObject.getLocal("myStorage");

		public function SharedObjectsForm(myStage) {
			this.myStage = myStage;
			this.m_textToBeInsterted.type = "input";
			this.m_textToBeInsterted.x = 10;
			this.m_textToBeInsterted.y = 10;
			m_textToBeInsterted.height = 20;
			this.m_textToBeInsterted.border = true;
			this.m_textToBeInsterted.borderColor = 0x0000FF;
			this.myStage.addChild(m_textToBeInsterted);
			
			createButton('הכנסה');
			createButton('מחיקה');
			createButton('טעינה');

		}
		private function createButton(buttonText:String) 
		{
			/* Creating Sprite */
			this.startingX+=20;
			var m_animSprite:Sprite = new Sprite();
			m_animSprite.graphics.beginFill(0x000000);
			m_animSprite.graphics.drawRect(startingX, 100, 50, 50);
			m_animSprite.graphics.endFill();
			this.myStage.addChild(m_animSprite);
			
			/* Creating text Field */
			var myTextField:TextField = new TextField();
			myTextField.text = buttonText;
			myTextField.textColor = 0xFF0000;
			myTextField.x = startingX+5;
			myTextField.y = 100;
			this.myStage.addChild(myTextField);
			
			this.startingX+=100;
			/* Adding event handlers */
			switch (buttonText)
			{
				case "הכנסה":
				myTextField.addEventListener(MouseEvent.CLICK, insertToShareObject);
				break;
				case "מחיקה":
				myTextField.addEventListener(MouseEvent.CLICK, deleteFromShareObject);
				break;
				case "טעינה":
				myTextField.addEventListener(MouseEvent.CLICK, callFromShareObject);
				break;
				default:
				trace ("Error")
			}
			
		}
		private function insertToShareObject(ev:Event)
		{
			//In this function m_textToBeInsterted.text will be inserted to ShareObject
			this.myStorage.data.myData = m_textToBeInsterted.text;
			m_textToBeInsterted.text = "";
		}
		private function deleteFromShareObject(ev:Event)
		{
			//In this function the ShareObject content will be deleted
			delete this.myStorage.data.myData;
		}
		private function callFromShareObject(ev:Event)
		{
			//This function will display the data in ShareObject
			if(this.myStorage.data.myData)
			{
				m_textToBeInsterted.text = this.myStorage.data.myData;
			}
			else
			{
				m_textToBeInsterted.text = "אין תוכן כרגע";
			}
		}
	}
}

וככה זה נראה:

אין יותר מדי מה להוסיף במקרה הזה, פשוט וקל.

במאמר הבא אנו נדון באודיו ב-ActionScript 3 ופלאש.

כדאי תמיד להשאר מעודכנים! הרשמו לעדכונים של האתר במייל! - המייל יישלח כל יום ראשון בעשר בבוקר ויכיל אך ורק את המאמרים שהתפרסמו באינטרנט ישראל. ללא ספאם, ללא הצפות, ללא בלגנים. 🙂

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (אין הצבעות)

תגיות: פורסם בקטגוריה: לימוד Action Script 3 ו-פלאש

אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

העדכונים נשלחים אך ורק כאשר האתר מתעדכן.

רן בר-זיק

רן בר-זיק כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי
הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.

מאמרים אחרונים