从MXML调用actionscript包函数

时间:2011-10-08 18:15:12

标签: flash flex actionscript

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

main.mxml包含一个Spark按钮:

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

1 个答案:

答案 0 :(得分:0)

你所追求的确实有点令人困惑,但我会试一试。

  

如何从MXML

调用btn.as中的函数

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

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

如果你想要别的东西,你必须详细说明。

  

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

是的,将其设为静态方法。像这样:

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

我对这种方法有初步的保留意见,所以如果不完全理解用例,就不会推荐它。