感謝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