<mx:DataGrid x="10" y="10" width="180" height="302" id="dgActions" dataProvider="{actionCollection}">
<mx:columns>
<mx:DataGridColumn headerText="Action" dataField="name"/>
<mx:DataGridColumn headerText="" dataField="setting" width="30" rendererIsEditor="true">
<mx:itemRenderer >
<mx:Component>
<mx:Box width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
<mx:CheckBox selected="{data.setting}" click="setActionSetting()">
<mx:Script>
<![CDATA[
private function setActionSetting(){
data.setting = String(this.selected);
}
]]>
</mx:Script>
</mx:CheckBox>
</mx:Box>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
出于某种原因,我在data.setting = String(this.selected)行中收到错误,该行显示“通过带静态类型的引用访问可能的未定义属性”。
[编辑]上述问题的解决方案(尽管不是整个混乱)是,一旦你进入<mx:Component>
标签,你就属于所述组件的范围。要访问此组件外部的脚本和节点,必须使用 outerDocument 对象。
[结束编辑]
我不确定它的期望是什么,我假设它会将复选框的选定(ness)的true / false值传递给方法,但似乎不明白“this”是什么,在这种情况下。
我做错了什么吗?我想要的只是让数据源反映最初输入复选框的状态的变化。
编辑: 我刚刚注意到,当我向函数添加trace('foo')时,它永远不会将任何内容写回控制台。复选框的本机行为(和事件捕获)是否阻止它冒泡到我的函数?
此外,当我在文档的其余部分添加对象外部的引用时,它告诉我它不能识别它们。我对Flex范围内的事情感到困惑......任何额外的指导或参考链接都非常方便。
答案 0 :(得分:1)
此(ha)情况下的指的是组件渲染器,而不是周围的类(或复选框,datagridcolumn,datagrid等)。最好不要将渲染器分解为实际组件,这样就不会像使用内联组件方法那样模糊范围。
Peter Ent's series on itemRenderers非常有用,应该解释您想要了解的有关该主题的所有信息。
答案 1 :(得分:0)
如果我不得不猜测“this”是mx:Script元素,请尝试“parent.selected”。
答案 2 :(得分:0)
CheckBox.selected
需要Boolean
值。您将data.setting设置为String
值的事实告诉我data.setting不是Boolean
。
答案 3 :(得分:0)
所以,经过大量的痛苦之后,我终于想出了这一切是如何运作的......
乔尔走在正确的轨道上,这个没有提到你希望它会引用的东西(即复选框)。此外,即使您将 this 传递给方法FROM复选框节点,它也会引用父包装类而不是复选框本身。因此,解决方案是传入事件,然后访问其目标,最后是复选框。然后你就回家了。
换句话说......
<mx:CheckBox selected="{data.setting}" click="setActionSetting(event)">
<mx:Script>
<![CDATA[
private function setActionSetting(e:Event):void{
data.setting = e.target.selected;
trace("n=" + data.name + " set to " + data.setting);
//the name is the other piece of the data that I omitted for clarity
}
]]>
</mx:Script>
</mx:CheckBox>