在我的表单中,我有一个带有浏览按钮的 TextInput 和一个 FileReference 。在这种形式,当我提交而不选择任何图像文件时,它将抛出类似“TypeError:错误#1009:无法访问空对象引用的属性或方法”的错误。
我的需要: 如果我在没有选择任何图像文件的情况下提交表单,则必须以编程方式拍摄虚拟图像。我对此一无所知。
我的示例代码:
<s:Form id="mainForm" height="100%" width="100%" left="10%" right="10%" top="10%">
<s:FormItem id="nameLabel" label="Employee Name">
<s:TextInput id="employeeName" rollOver="validateAndSubmit()"/>
</s:FormItem>
<s:FormItem id="imageLabel" label="Image">
<mx:HBox>
<s:TextInput id="employeeImageName" editable="false" showErrorSkin="true" showErrorTip="false"/>
<s:Button id="imageButton" label="Browse" click="onBrowseButtonClicked(event)"/>
</mx:HBox >
</s:FormItem>
<s:FormItem>
<s:layout>
<s:HorizontalLayout gap="10"/>
</s:layout>
<s:Button id="submitButton" label="Submit" click="storeInputs(event)"/>
<s:Button id="clearButton" label="clear" click="clearInputs()"/>
</s:FormItem>
</s:Form>
<s:DataGrid width="100%" height="100%" dataProvider="{arrayCollection}">
<s:columns>
<s:ArrayList>
<s:GridColumn headerText="Name" dataField="name" />
<s:GridColumn headerText="Employee" id="imageColumn" dataField="imageData"/>
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<s:Image id="image" source="{data.imageData}" visible="true" height="80" width="100"/>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:ArrayList>
</s:columns>
</s:DataGrid>
storeInput()
private function storeInputs(event:MouseEvent) : void
{
arrayCollection.addItem({
name : employeeName.text,
imageData: loadFile.data
});
}
修改 我的onBrowseButtonClicked()代码:
public var loadFile:FileReference;
[Bindable]private var arrayCollection : ArrayCollection = new ArrayCollection ();
private function onBrowseButtonClicked(event : MouseEvent) : void
{
loadFile = new FileReference();
loadFile.addEventListener(Event.SELECT, selectHandler);
var fileFilter:FileFilter = new FileFilter("Images: (*.jpeg, *.jpg, *.gif, *.png)", "*.jpeg; *.jpg; *.gif; *.png");
loadFile.browse([fileFilter]);
}
private function selectHandler(event:Event):void
{
loadFile.load();
}
如果我没有使用浏览按钮选择任何文件,则必须自动加载虚拟图像。我该怎么办?
答案 0 :(得分:1)
首先将它的图片标记设为itemRenderer,如下所示
<s:GridColumn headerText="Employee" id="imageColumn" dataField="imageData" itemRenderer="components.GridItemRender"/>
GridItemRender.MXML
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function emp_renderHandler(event:Event):void
{
if (data.imageData == null)
{
image.source = "http://localhost/demo/images/male.jpg";
}
}
]]>
</fx:Script>
<s:Image id="image" source="{data.imageData}" width="80" height="100" render="emp_renderHandler(event)"/>
我认为这段代码可以帮助你...
答案 1 :(得分:0)
你需要这样的东西:你可能需要更改错误事件类型,我使用e:IOErrorEvent作为我的URLLoader对象,但我不确定它适用于你的情况
private function selectHandler(event:Event):void
{
try
{
loadFile.load();
} catch (e:Error)
{
loadFile = dummypicture;
loadFile.load();
}
}