【发布时间】:2015-05-18 15:50:33
【问题描述】:
我正在尝试在 Flash (AS3) 中创建一个表单,该表单可以将多个动态文本框中的数据/文本保存到用户指定的路径和本地文件中,并将任何保存的表单加载回适当的文本框中。我找到了一些关于如何使用单个文本框执行此操作的很好的示例。我知道它应该很简单,但是我似乎无法弄清楚或成功修改现有示例以使用多个文本框?有任何想法吗?
这是我目前正在使用/尝试修改的代码。
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.IOErrorEvent;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.ByteArray;
import flash.xml.XMLDocument;
public class BinaryXMLTool extends Sprite
{
// ** minimalist buttons **
private var browseButton:TextField;
private var saveButton:TextField;
// ** minimalist editor **
private var xmlText:TextField;
// ** browse/load/save **
private var xmlFile:FileReference;
public function BinaryXMLTool():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
stage.align = StageAlign.LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.showDefaultContextMenu = false;
// ** draw minimalist text editor **
xmlText = new TextField();
xmlText.multiline = true;
xmlText.background = true;
xmlText.backgroundColor = 0xEEEEEE;
xmlText.type = TextFieldType.INPUT;
xmlText.width = 400;
xmlText.height = 400;
xmlText.border = true;
xmlText.x = 15;
addChild(xmlText);
// ** draw minimalist browse button **
browseButton = new TextField();
browseButton.autoSize = TextFieldAutoSize.LEFT;
browseButton.background = true;
browseButton.backgroundColor = 0x000000;
browseButton.defaultTextFormat = new TextFormat("Tahoma", 14, 0xFFFFFF, true, null, null, null, null, null, 4, 4);
browseButton.selectable = false;
browseButton.text = "BROWSE";
browseButton.x = (stage.stageWidth - browseButton.width) * 0.5;
browseButton.y = 420;
addChild(browseButton);
// ** draw minimalist save button **
saveButton = new TextField();
saveButton.autoSize = TextFieldAutoSize.LEFT;
saveButton.background = true;
saveButton.backgroundColor = 0xAAAAAA;
saveButton.defaultTextFormat = browseButton.defaultTextFormat;
saveButton.selectable = false;
saveButton.text = "SAVE";
saveButton.x = (stage.stageWidth - saveButton.width) * 0.5;
saveButton.y = 460;
addChild(saveButton);
// ** button listeners **
browseButton.addEventListener(MouseEvent.CLICK, on_buttonClick, false, 0, true);
saveButton.addEventListener(MouseEvent.CLICK, on_buttonClick, false, 0, true);
}
/**
* handle browse or save
*/
private function on_buttonClick(evt:MouseEvent):void
{
var btn:TextField = evt.target as TextField;
if (btn)
{
if (btn.text == "BROWSE")
{
xmlFile = new FileReference();
xmlFile.addEventListener(Event.SELECT, on_xmlSelect, false, 0, true);
xmlFile.browse([new FileFilter("XML Documents","*.xml")]);
}
else if (btn.text == "SAVE")
{
if (xmlFile)
{
if (xmlText.text.length)
{
// ** saving as binary **
var data:ByteArray = new ByteArray();
data.writeUTFBytes(xmlText.text);
data.compress();
new FileReference().save(data, "bin" + xmlFile.name);
}
}
}
}
}
/**
* handle browse, load XML file
*/
private function on_xmlSelect(evt:Event):void
{
xmlFile.removeEventListener(Event.SELECT, on_xmlSelect);
xmlFile.addEventListener(Event.COMPLETE, on_xmlComplete, false, 0, true);
xmlFile.load();
}
/**
* handle load, check if it is binary, uncompress, display XML in editor
*/
private function on_xmlComplete(evt:Event):void
{
xmlFile.removeEventListener(Event.COMPLETE, on_xmlComplete);
saveButton.backgroundColor = 0x000000;
var data:* = FileReference(evt.target).data;
if (data is ByteArray)
{
try
{
ByteArray(data).uncompress();
}
catch(e:Error)
{
}
}
data = XML(data);
xmlText.text = data;
}
}
}
【问题讨论】:
-
它也适用于本地办公环境,所以不幸的是 PHP 不是一个选项。
-
好的,您找到的示例将单个 XML 字符串作为 zlib 压缩字节保存到文件中。在您的情况下,您希望将“多个文本”值保存到文件中;关心什么文件格式?您可以将其保存为纯 XML、AMF(ActionScript 消息格式)或其他格式。
-
我不介意它保存为哪种文件格式。
-
让您对我正在尝试创建的内容有更多的了解。我需要我们内部使用的客户详细信息/注册表单的数字版本。字段包括公司名称、联系人姓名、电话、手机、传真、电子邮件、Web 等,有点像地址簿应用程序。 Flash App 将加载我们现有 FORM 的 A4 大小/纵横比 JPG,并在页面上的适当位置创建 35 个或更多文本框。需要能够填充自己保存所述数据并将所述数据加载回适当的文本框中。
-
有道理。我发布了一个将多个文本字段值存储到 XML 文件的示例。
标签: forms actionscript-3 flash