【问题标题】:invoke actionscript package function from MXML从 MXML 调用 actionscript 包函数
【发布时间】:2011-10-08 18:15:12
【问题描述】:

如何从 MXML 调用 btn.as 中的函数,是否可以在不创建 btn 实例的情况下调用函数?

包含 Spark 按钮的 main.mxml:

<s:Button text="Add Image"/>

btn.as 是一个包:

package {
    public class btn extends Sprite {
        public function btn() {
        }

        public function addImage():void {
           var im:Image = new Image("background.png");
           addChild(im);
        }
    }
}

【问题讨论】:

    标签: flash apache-flex actionscript


    【解决方案1】:

    你到底在追求什么有点令人困惑,但我会试一试。

    如何从 MXML 调用 btn.as 中的函数

    我将假设您希望在单击按钮时在 btn 组件的实例上调用 addImage 函数。你可以这样:

    <s:Button text="Add Image" click="{btnInstance.addImage()}"/>
    

    如果您想要其他内容,则必须详细说明。

    是否可以在不创建 btn 实例的情况下调用函数?

    是的,让它成为一个静态方法。像这样的:

        package {
            public class btn extends Sprite {
                public function btn() {
                }
    
                public static function addImage():void {
                   var im:Image = new Image("background.png");
                   addChild(im);
                }
            }
        }
    

    然后你可以像这样调用静态方法:

    <s:Button text="Add Image" click="{btn.addImage()}"/>
    

    需要注意的是,我不希望“addChild”在静态方法中做任何有用的事情。如果没有组件实例,则不在显示列表中;并且您的新“孩子”将永远不会显示。事实上,没有办法引用新的孩子。我想你可以将一个容器传递给 addImage 函数并在那里添加孩子。概念上是这样的:

                public static function addImage(container:UIComponent):void {
                   var im:Image = new Image("background.png");
                   container.addChild(im);
                }
    

    虽然我对这样的方法有初步的保留意见,所以在没有完全理解用例的情况下不推荐它。

    【讨论】:

    • 你解释得对,当假设“private var mMainMenu:Sprite;”时,我很难调用将图像添加到精灵中哪个 mMainMenu 将替换上面示例中的“容器”,它仍然无法将图像添加到 mMainMenu,因为它是“静态的”。我觉得这些问题没有理想的解决方案?
    • 我不确定您要解决的问题是什么。我怀疑您的应用程序存在架构问题;但从我认识的小sn-p上很难分辨。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多