【问题标题】:adobe air with flex, file new, open and save for Desktop software program带有 flex 的 adobe air,新建文件,打开并保存桌面软件程序
【发布时间】:2012-08-26 23:40:18
【问题描述】:

我已经为所有的搜索感到头疼。我不敢相信这是一个如此令人困惑的话题,因为我们创建的每个软件程序都必须能够保存用户输入,对吧。

问题来了: 小说写作软件程序主窗口有标签导航器,有四个导航器内容页面1.字符,2.世界,3.对象,4.编辑器

每个navigatorcontent页面都有用户输入字段,形式有textinput组件、textarea组件、richtexteditor组件等。

问题 1: 用户需要能够打开一个新项目并给它一个名称和必须保存它的状态。 Novel写作软件程序中的所有用户输入都必须附加到用户指定的文件名 - 无法给出示例代码,因为我什至不知道从哪里开始查找。

问题 2: 如果用户现在已经定义了一个新的项目名称,他所有来自不同输入组件的输入都必须编译成一个可以保存的文件。 (Dan Pichelman 在使用 file.borwseforsave 函数时给了我一个满意的答案。)这是有道理的,但我首先需要将所有用户输入放入该单个文件中。我确信它必须是一个 xml 文件,并且会有关于如何执行此操作的指南,但是......

问题 3: 这给我带来了另一个问题。到目前为止,我研究过的所有页面都告诉我如何将 xml 文件中的数据加载到组件中,但没有告诉我如何将组件中的文本写入 xml 文件。而且这个xml文件不能是storage目录下的prefs文件,它必须由用户命名,然后在软件的不同选项卡中填写他所有的文本后,必须保存在这个xml文件中,并保存在用户所在的位置选择。

问题 4: 现在用户输入了他的文本并将其写入一个他命名并设置路径的 xml 文件,他去度假,并在两周内打开他保存的文件以再次处理他的项目。现在必须将存储在 xml 中的所有数据写回到不同的用户输入组件中,这样他才能继续处理他的项目,说实话,有一些关于这个主题的示例和教程,但同样来自一个页面透视不是多标签透视。

问题 5: 现在用户已经删除和/或更改了他开始时输入的一些文本,他在 textareas 和 texteditor 中写了更多文本,然后单击文件 - 保存按钮。 xml 文件或任何需要使用的文件必须更新并保存,所有更改都会覆盖旧文件。

问题 6: 用户输入的数据最终将成为一本 400 页的书。这些数据显然主要在 Richtexteditor 组件中,因此无论使用何种保存方法,数据库或 xml 或其他任何方法,都需要能够包含所有这些数据。

想一想,如果您正在使用例如 microsoft powerpoint,它有多个页面,所有页面都包含不同的用户输入,当您单击文件 - 保存时,它会将所有输入保存到一个文件中。当我作为用户打开该保存的文件时,它会将所有内容加载回其位置,我可以更改和操作输入并再次保存。我原以为这将是 adobe 或任何其他软件会教的第一件事,因为这就是软件程序的全部内容。但是很可惜,关于 adobe air for Desktop 应用程序的这个主题的教程非常少见。

我的承诺是,如果有人可以帮助我,或者那里有适当的教程,我会随着我一步一步地为其他新手写一个教程。

【问题讨论】:

    标签: apache-flex air adobe desktop-application


    【解决方案1】:

    我相信您面临的主要问题是从 UI 输入到 XML 数据(以及返回)的转换。这更多是一个架构问题,而不是纯粹的技术问题,这可以解释为什么您很难找到信息。

    演示模型

    有很多方法可以解决您的用例,但最重要的是您需要一个演示模型。这是与特定视图同时使用的模型类。您可以在各种表示模型和真实数据模型(在这种特殊情况下表示为 XML 数据结构)之间来回转换。这有点抽象,但我会大致尝试与您交谈。请意识到我要向您展示的只是众多可能的方法之一。我相信这是传达这个想法的最简单方法。

    下午班

    首先,我们需要为每个视图创建一个表示模型,即 1. 角色、2. 世界、3. 对象、4. 编辑器。我们将为它们命名,以便我们知道这些是模型并将它们放在自己的包中;例如

    • my.app.pm.CharactersModel
    • my.app.pm.WorldsModel
    • my.app.pm.ObjectsModel
    • my.app.pm.EditorModel

    ('pm' 在这里表示演示模型)
    然后,这些类中的每一个都会接收与您的视图中的输入和/或显示相匹配的属性。这些可以简单也可以复杂。例如,假设 'characters' 视图有一个 'title' 文本输入和一个可选字符列表,你会得到一个像这样的类:

    public class CharactersModel {
        [Bindable] public var title:String;
        [Bindable] public var characters:IList; //list of Character model instances
        [Bindable] public var selectedCharacter:Character;
    }
    

    并且该 IList 中的每个字符都是一个实例:

    public class Character {
        [Bindable] public var firstname:String;
        [Bindable] public var lastname:String;
    }
    

    注意属性是如何标记为可绑定的:我们将在下一段中了解原因。

    查看课程

    您现在可以创建一个看起来有点像这样的视图类:

    <fx:declarations>
        <pm:CharactersModel id="pm" />
    </fx:declarations>
    
    <s:FormItem label="Title">
        <s:TextInput text="@{pm.title}" />
    </s:FormItem>
    
    <s:FormItem label="Edit character">
        <s:DropdownList dataProvider="{pm.characters}" 
                        selectedItem="@{pm.selectedCharacter}" />
    </s:FormItem>
    
    <s:FormItem label="First name">
        <s:TextInput text="@{pm.selectedCharacter.firstName}" />
    </s:FormItem>
    
    <s:FormItem label="Last name">
        <s:TextInput text="@{pm.selectedCharacter.lastName}" />
    </s:FormItem>
    

    (警告:这是伪代码;我写的是我的头顶)
    看看我们如何使用双向绑定将 UI 的值读取和写入到 Presentation Model 中?

    转化

    现在剩下要做的就是编写一个类,它将您的 PM 转换为您的 XML 数据结构,反之亦然。这是一个技术问题,所以我相信您可以找到有关此的信息,但基本上

    当用户点击“保存”按钮时,您应该能够调用类似

    var xmlToSave:XML = Convertor.pmToXml(
        charactersView.pm, worldsView.pm, objectsView.pm, editorsView.pm
    );
    

    当用户点击“加载”按钮时:

    charactersView.pm = Convertor.xmlToCharactersPm(loadedXML);
    worldsView.pm     = Convertor.xmlToWorldsPm(loadedXML);
    objectsView.pm    = Convertor.xmlToObjectsPm(loadedXML);
    editorView.pm     = Convertor.xmlToEditorPm(loadedXML);
    

    写入磁盘

    阅读我之前写的这个答案:
    Storing/Saving XML in local asset folder in AIR

    【讨论】:

    • 嗨 RIAstar 这看起来很不错,我试着玩了一下,但会忙一段时间,但是我已经得到了要保存的文本,但加载是个问题
    • 上面的代码保存得很好,但是当我打开文件时,它只将所有文本放在 rte.text 组件中,而不是放回各自的位置。任何想法
    • 既然您这样做了rte.htmlText = fs.readUTFBytes(fs.bytesAvailable);,那么所有文本都在该组件中是有道理的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多