במאמר הקודם למדנו איך לתקשר עם 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 ופלאש.