这是正确的方式称呼一个组分的方法的内部单
-
07-07-2019 - |
题
我是黑客攻击我的方式,通过学习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>
任何人都可以点我在正确的方向?
解决方案
问题是与mx:构成部分父母的标记。
从 该文档:
的 <mx:构成部分>标签定了一个新的 范围内的一个单的文件,那里的 当地范围的项目或渲染 项目编辑的定义是单 代码块分隔 <mx:构成部分>和 </mx:构成部分> 标记。访问外的元素 地方范围的项目呈示器 或项的编辑,你的前缀的元素 名与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>
其他提示
你也可以派遣一个事件呈示器组件,并添加一个听众中的主要文件。这是有用的你应该要港口的呈示器组件的一个单独的单部件的文件。
这里的是与你的代码:
<?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}" myEvent="updateStory();">
<mx:itemRenderer>
<mx:Component>
<mx:Metadata>
[Event(name="myEvent", type="flash.events.Event")]
</mx:Metadata>
<mx:HBox>
<mx:Label />
<mx:TextInput keyUp="dispatchEvent(new Event('myEvent', true))" />
<mx:TextArea text="{data.notes}" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
</mx:Canvas>
这是你将如何使用它在一个单独的单的部件:
<?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}" myEvent="updateStory();" itemRenderer="StoryEditor" />
</mx:Canvas>
StoryEditor.mxml:
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Metadata>
[Event(name="myEvent", type="flash.events.Event")]
</mx:Metadata>
<mx:Label />
<mx:TextInput keyUp="dispatchEvent(new Event('myEvent', true));" />
<mx:TextArea text="{data.notes}" />
</mx:HBox>
不隶属于 StackOverflow