【问题标题】:AS3 - pass variable to class function (button to dataGrid)AS3 - 将变量传递给类函数(按钮到 dataGrid)
【发布时间】:2013-07-11 04:29:43
【问题描述】:

我正在尝试在 Flash 中的 dataGrid 中创建按钮。但是,我是一个初学者,我现在不知道如何使生成按钮列的函数获取我需要用于每个按钮的参数。我需要每个按钮都有一个特定的标签,如果我单击该按钮,它将 googleURL 复制到剪贴板。

我不知道如何将变量“buttonLabel”和“googleURL”传递给该函数...

这是代码的 .fla 部分:

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

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

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

这里是 ButtonCell 类:

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);
    }
}
}
#######################################

哇,这工作完美,这就是问题所在。太感谢了!!但是,还有一件事我不确定... 当我想添加更多按钮时,它只显示最后一个按钮......我不确定出了什么问题。这是绘制 5 个项目但按钮的示例 sript - 只有最后一个...

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);
}

【问题讨论】:

    标签: actionscript-3 flash class button datagrid


    【解决方案1】:

    首先你需要让参数传递给构造函数

    public function ButtonCell(buttonLabel:String, googleURL:String)
    {
        super();
    
        _buttonLabel = buttonLabel;
        _googleURL = googleURL;
    
        this.label = _buttonLabel;
    
        addEventListener(MouseEvent.CLICK, onButtonClick);
    }
    

    然后在创建新的 ButtonCell 时,您只需要像这样传递参数:

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

    【讨论】:

    • 感谢您的回答,我已经尝试过这个,但是(我不知道这怎么可能??)它给了我这个错误:场景 1,图层“图层 1”,帧 1,第 485 1137 行:参数数量不正确。预计不超过 1 个。
    • 是否有可能只有 ButtonCell 接受一个参数?如果是这种情况,这就是您将得到的错误。
    • 我不确定:我在那里写了这个:btnCol.cellRenderer = ButtonCell(googleURL,buttonLabel); 但我不知道为什么它会给出这个错误。我也不确定是否有必要通过类将按钮放在 dataGrid 中,也许有一些不使用类的解决方案?我完全迷失了,我不知道如何运行我的应用程序,这是我需要完成的最后一步。我只需要将按钮放在 dataGrid 中的项目旁边...:/
    • 它需要是新的 ButtonCell
    • 哇,这工作完美,这就是问题所在。太感谢了!!但是还有一件事我不确定......
    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2019-04-03
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多