感谢wezzy和过去几天帮助我的其他人。我一直在接受他们的建议并试图自己解决剩下的问题,但我又被卡住了。
我有一个如下结构的txt文件:
button1_label
button2_label
button3_label
我的程序在运行时创建这3个按钮并将它们放在一个组中。
protected function onLoaded(e:Event):void {
var myArrayOfLines:Array = e.target.data.split(/\n/);
var tempBtn:Button;
for(var i:Number = 0;i < myArrayOfLines.length;i++){
var j:Number = i+1;
tempBtn = new Button();
tempBtn.id = "btn" + i;
tempBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
var index:uint = parseInt(evt.currentTarget.id.replace("btn", ""));
//TextArea code will go here
trace(text); // Traces null
});
tempBtn.label = myArrayOfLines[i];
btnArray.push(tempBtn);
group.addElement(btnArray[i]);
}
}
现在您可以从我的代码中看到的是,我正在尝试让每个按钮将字符串打印到textarea。我已经按照以下方式构建了我的新buttons.txt:
button1_label
"Hello"
button2_label
"Goodbye"
button3_label
"Come again"
所以我想做的是让button1打印“你好”。 .txt文件的所有行都被推送到myArrayOfLines。提前感谢您的帮助。
修改 完整的解释
抱歉,我试图简化我的问题,猜猜我让它更难理解。我做了一个文本编辑器而不是运行客户端,没有服务器。我有一组按钮,可以在TextArea中插入预定义的短语。每个按钮都有一个监听器,可以执行myTextArea.insert(“sometext”); (但每个按钮的文本不同。用户要求能够创建自己的按钮以插入自己的字符串。我想我会有几个og textinputs,用户可以在其中定义标签,以及一个将插入到单击按钮上的textarea。我会将标签写入一行,然后将字符串写入下一行。现在我创建了一个带有此格式的buttons.txt文件,以查看它是否可行。
最终编辑:工作代码
public function setupBtns(e:Event):void{
var file:File = File.documentsDirectory.resolvePath("buttons.txt");
var stream:FileStreamWithLineReader = new FileStreamWithLineReader();
stream.open(file, FileMode.READ);
while(stream.bytesAvailable) {
// this line contains the headers like button1_label etc.
var label:String;
// this line contains the string
if(stream.bytesAvailable) {
// this line contains the actual label like "Hello";
label = stream.readUTFLine();
line = stream.readUTFLine();
// strip off the first and last character as they are double quotes
line = line.substring(1, line.length-1);
var tempBtn:Button = new Button();
tempBtn.addEventListener(MouseEvent.CLICK, btnListener);
tempBtn.label = label;
tempBtn.name = line;
btnArray.push(tempBtn);
for(var i:Number = 0;i<btnArray.length;i++){
group.addElement(btnArray[i]);
}
}
}
}
protected function btnListener(e:MouseEvent):void{
mainTextField.insertText(e.target.name);
trace(e.target.name);
}
答案 0 :(得分:1)
尝试一下,让我知道它是如何运作的......
编辑:(尝试下面的新代码)
protected function onLoaded(e:Event):void {
var myArrayOfLines:Array = e.target.data.split(/\n/);
var tempBtn:Button;
for(var i:Number = 0;i < myArrayOfLines.length;i=i+1){
var j:Number = i+1;
tempBtn = new Button();
tempBtn.id = "btn" + i;
tempBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void{
myTextArea.text += '\n' + myArrayOfLines[j];
});
tempBtn.label = myArrayOfLines[i];
btnArray.push(tempBtn);
group.addElement(btnArray[btnArray.length-1]);
}
}
答案 1 :(得分:0)
首先:不要在动作脚本中使用匿名函数作为侦听器 - 如果你哟,你以后就不能删除它们。
改为使用这样的类方法:
tempBtn.addEventListener(MouseEvent.CLICK, onMouseClick);
private function onMouseClick(evt:MouseEvent):void
{
if (evt.currentTarget == button1_label)
{
// do sth for btn1
}
else if (evt.currentTarget == button2_label)
{
// do sth for btn2
}
// ...
}
修改强>
刚刚看到,您正在使用ID,然后只需将上面的代码更改为这样:
if (evt.currentTarget.id == "btn1")