【问题标题】:Flex - Trying to load text file from a list into TextAreaFlex - 尝试将文本文件从列表加载到 TextArea
【发布时间】:2011-06-27 18:36:20
【问题描述】:

我有一个 TextArea 和一个 DataGrid。我已经用目录中的文本文件列表填充了 DataGrid。现在我正在尝试将所选文件加载到 TextArea 中。从列表中选择文件时出现空指针异常,这告诉我我没有正确访问它......我想。

    <s:TextArea id="mainTextField" x="0" y="0" width="730" height="523"
                    editable="true" enabled="true"/>
        <s:DataGrid id="list" x="730" y="0" width="294" height="523" dataProvider="{files}" gridClick="listHandler(event)">
            <s:columns>
                <s:ArrayList>
                    <s:GridColumn dataField="name" headerText="Filename"/>    
                </s:ArrayList>
                </s:columns>

        </s:DataGrid>

...

    private var files:ArrayCollection;

                public var stream:FileStream = new FileStream(); // The FileStream object used for reading and writing the currentFile
                public var currentFile:File;

    private function init():void
                {

                    // Default on start: resolve desktop directory
                    var desktop:File = File.desktopDirectory;
                    // Get desktop directory listing
                    files = new ArrayCollection(desktop.getDirectoryListing());
                }

                protected function listHandler(event:GridEvent):void
                {
                    currentFile = event.target as File;
                    trace(currentFile.nativePath.toString()); **//Error occurrs here**
                    stream = new FileStream();
                    stream.openAsync(currentFile, FileMode.READ);
                    stream.addEventListener(Event.COMPLETE, fileReadHandler);
                    stream.addEventListener(IOErrorEvent.IO_ERROR, readIOErrorHandler);
                }

                public function fileReadHandler(event:Event):void 
                {
                    var str:String = stream.readUTFBytes(stream.bytesAvailable);
                    stream.close();
                    var lineEndPattern:RegExp = new RegExp(File.lineEnding, "g");
                    str = str.replace(lineEndPattern, "\n");
                    mainTextField.text = str; 
                    stream.close();
                }

【问题讨论】:

    标签: apache-flex file text datagrid load


    【解决方案1】:

    我对此不是 100% 确定,但我不认为 event.target 是 GridClick 事件中的行(即文件)。我认为 GridClick 事件更倾向于选择一个单元格。试试

    currentFile = list.selectedItem as File;
    

    如果这不起作用,试试这个:

    curentFile = files.getItemAt(event.rowIndex) as File;
    

    【讨论】:

    • 这是第二个 :) 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多