感谢wezzy和其他在过去几天帮助我的人。我一直在听取他们的意见,并试图找出其他问题,但我再次陷入困境。Flex:将事件分配给动态创建的按钮
我有结构化的这样一个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”); (但每个按钮都有不同的文本,用户要求能够创建自己的按钮来插入自己的字符串,我想我会有一些用户可以定义标签的文本输入,以及一个可插入textarea on button click。我会将标签写入一行,然后将字符串写入下一行。现在,我创建了一个带有这种格式的buttons.txt文件,以查看它是否可以工作。
FINAL EDIT:WORKING CODE
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);
}
一般认为适当的要求跟进信息时,编辑原来的问题。我不清楚这是一个真正的新问题还是基于这个问题。假设有足够的内容来量化一个新的问题(我会让你决定),我把'后续'文本去掉了你的主题。 – JeffryHouser
对不起。我把另一个问题的答案标记为提前解决。我不确定我是否仍然可以发布该问题。这是基本相同的问题,但更详细和更改代码。我应该回到原来的帖子吗? – RapsFan1981
我敢肯定你可以取消选择以前选择的答案。如果是这样,最好取消选择答案并编辑旧答案。不过,现在事情很混乱,因为你在这里得到答案。我怀疑如果我们离开它,任何人都会抱怨。 [但;从档案的角度来看;它可能会错误地说我以前的问题有一个“不正确/不完整”的答案,标记为正确的] – JeffryHouser