2013-07-12 26 views
0

我想在我的dataGrid中創建按鈕。不過,我是一個begginer,我現在不怎麼做我的函數,它生成按鈕列需要參數,我需要使用每個按鈕。我需要每個按鈕都有一個特定的標籤,如果我點擊該按鈕,它會將googleURL複製到剪貼板。AS3 - 傳遞變量到類函數(按鈕到dataGrid)

我不知道如何傳遞變量「BUTTONLABEL」和「googleURL」到功能......

這裏是代碼的.fla部分:

 googleURL = "www.someadress.com"; 
     buttonLabel = "someLabel"; 

     var btnCol:DataGridColumn = new DataGridColumn("buttonColumnTitle"); 

     btnCol.cellRenderer = ButtonCell; 
     btnCol.editable = false; 
     tabulka.addColumn(btnCol); 

,這裏是扣式類:

package 
{ 
import flash.desktop.Clipboard; 
import fl.controls.Button; 
import fl.controls.listClasses.ICellRenderer; 
import fl.controls.listClasses.ListData; 
import flash.events.Event; 
import flash.events.MouseEvent; 


public class ButtonCell extends Button implements ICellRenderer 
{ 
    private var _listData:ListData; 
    private var _data:Object; 

    public var _buttonLabel:String; 
    public var _googleURL:String; 


    public function ButtonCell() 
    { 
     super(); 

     //_buttonLabel = buttonLabel; 
     //_googleURL = googleURL; 

     this.label = _buttonLabel; 

     addEventListener(MouseEvent.CLICK, onButtonClick); 
    } 

    public function set data(d:Object):void 
    { 
     _data = d; 
    } 

    public function get data():Object 
    { 
     return _data; 
    } 

    public function get listData():ListData 
    { 
     return _listData; 
    } 

    public function set listData(value:ListData):void 
    { 
     _listData = value; 
    } 

    override public function get selected():Boolean 
    { 
     return _selected; 
    } 

    override public function set selected(value:Boolean):void 
    { 

    } 

    public function onButtonClick(event:MouseEvent) 
    { 
     System.setClipboard(_googleURL); 
    } 
} 
} 
#######################################

如果這工作完美,那就是問題所在。非常感謝!!但是還有一件事我不確定... 當我想添加更多的按鈕時,它只顯示最後一個按鈕......我不確定有什麼問題。這是樣品sript其中提請5項,但按鈕 - 只有最後一個...

import ButtonCell; 
import fl.controls.dataGridClasses.DataGridColumn; 
import fl.controls.listClasses.CellRenderer; 
import fl.controls.DataGrid; 
import fl.data.DataProvider; 

var googleURL:String = "www"; 
var buttonLabel:String = "bt"; 

var provide = new DataProvider; 

var tabulka:DataGrid = new DataGrid(); 
tabulka.x = 50; 
tabulka.y = 50; 
addChild(tabulka); 
tabulka.setSize(400, 300); 
tabulka.columns = ["Parcela","Odkaz"]; 
tabulka.columns[0].width = 50; 
tabulka.columns[1].width = 350; 
tabulka.selectable = false; 
tabulka.dataProvider = provide; 

var btnCol:DataGridColumn = new DataGridColumn("Copy"); 
tabulka.addColumn(btnCol); 
for (var i = 0; i<5; i++){ 
    provide.addItem({Parcela:"Item "+i}); 
    btnCol.cellRenderer = new ButtonCell(buttonLabel = "bt"+i, googleURL = "www" + i); 
} 

回答

0

首先創建時,你需要讓這個參數得到傳遞給構造

public function ButtonCell(buttonLabel:String, googleURL:String) 
{ 
    super(); 

    _buttonLabel = buttonLabel; 
    _googleURL = googleURL; 

    this.label = _buttonLabel; 

    addEventListener(MouseEvent.CLICK, onButtonClick); 
} 

然後一個新的你扣式將只需要在參數傳遞,像這樣:

btnCol.cellRenderer = new ButtonCell(googleURL,buttonLabel); 
+0

感謝答案,我alredy tryied這一個,但(我不知道這怎麼可能?)它給了我這個錯誤: 場景1,圖層'層1',幀1,線485 \t 1137:參數的數量不正確。預計不會超過1. – Hokyjack

+0

是否有可能只有ButtonCell接受一個參數?如果是這樣,那就是你會得到的錯誤。 – Jnatalzia

+0

我不確定:我在那裏寫了:'btnCol.cellRenderer = ButtonCell(googleURL,buttonLabel);'但我不知道爲什麼它給出這個錯誤。我不確定是否有必要將按鈕放在dataGrid中,也許有一些解決方案沒有使用class?我絕對失去了,我不知道如何運行我的應用,這是我需要完成的最後一步。我只需要將按鈕放在dataGrid中的項旁邊即可::/ – Hokyjack