这是在mxml中调用组件方法的正确方法

Chr*_*mbo 2 apache-flex mxml itemrenderer

我正在通过学​​习Flex来攻击我,并发现了一些奇怪的行为.当我尝试编译我的代码时,我抛出了这个错误 - 错误:调用可能未定义的方法updateStory.我之前以这种方式使用了方法调用,并且在这种情况下无法发现出错的地方.这是组件的代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">

  <mx:Script>
    <![CDATA[

    import mx.collections.ArrayCollection;

    [Bindable]
    public var storyCards:ArrayCollection;

    private function updateStory():void
    {
       trace("success");
    }   

    ]]>
  </mx:Script>

  <mx:TileList dataProvider="{storyCards}" >

    <mx:itemRenderer>

      <mx:Component>

    <mx:HBox>
      <mx:Label />
      <mx:TextInput keyUp="updateStory()" />
      <mx:TextArea text="{data.notes}" />
    </mx:HBox>

      </mx:Component>

    </mx:itemRenderer>

  </mx:TileList>
</mx:Canvas>
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?

小智 7

问题出在mx:Component父标记上.

来自文档:

< mx:Component >标记在MXML文件中定义新范围,其中项目渲染器或项目编辑器的本地范围由< mx:Component >和< / mx:Component >标记分隔的MXML代码块定义.要访问项呈示器或项目编辑器的本地范围之外的元素,请在元素名称前加上outerDocument关键字.

所以你需要公开'updateStory'并添加outerdocument关键字,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
    <![CDATA[

    import mx.collections.ArrayCollection;

    [Bindable]
    public var storyCards:ArrayCollection;

    public function updateStory():void
    {
       trace("success");
    }       
    ]]>
</mx:Script>
<mx:TileList dataProvider="{storyCards}" >
       <mx:itemRenderer>
            <mx:Component>
                <mx:HBox>
                 <mx:Label />
                 <mx:TextInput keyUp="outerDocument.updateStory()" />
                 <mx:TextArea text="{data.notes}" />
                </mx:HBox>
            </mx:Component>
        </mx:itemRenderer>
    </mx:TileList>
</mx:Canvas>
Run Code Online (Sandbox Code Playgroud)