0

私はすでにすべての検索から頭痛がしています。私たちが作成するすべてのソフトウェア プログラムはユーザー入力を保存できなければならないので、これがそれほど紛らわしいトピックであるとは信じられません。

ここに問題があります: 小説執筆ソフトウェア プログラムのメイン ウィンドウには、4 つのナビゲーター コンテンツ ページを含むタブナビゲーターがあります。1. キャラクター、2. 世界、3. オブジェクト、4. エディター

各 navigatorcontent ページには、textinput コンポーネント、textarea コンポーネント、richtexteditor コンポーネントなどの形式のユーザー入力フィールドがあります。

問題 1: ユーザーは、新しいプロジェクトを開いて、名前と保存先の状態を指定できる必要があります。Novel 書き込みソフトウェア プログラムでのすべてのユーザー入力は、ユーザーが指定したファイル名に添付する必要があります。サンプル コードを提供することはできません。

問題 2: ユーザーが新しいプロジェクト名を定義した場合、さまざまな入力コンポーネントからのすべての入力を保存可能な単一のファイルにコンパイルする必要があります。(Dan Pichelman は、file.borwseforsave 関数の使用に関して満足のいく回答をくれました。) それは理にかなっていますが、最初にすべてのユーザー入力をその 1 つのファイルに入れる必要があります。私はそれがxmlファイルでなければならず、これを行う方法に関するガイドがあると確信していましたが...

問題 3: これにより、別の問題が発生します。これまでに調査したすべてのページで、xml ファイルからコンポーネントにデータをロードする方法について説明されていますが、コンポーネントから xml ファイルにテキストを書き込む方法については説明されていません。また、このxmlファイルはストレージディレクトリのprefsファイルにすることはできません。ユーザーが名前を付ける必要があり、ソフトウェアのさまざまなタブにすべてのテキストを入力した後、このxmlファイルに保存し、ユーザーが保存した場所に保存する必要があります選択します。

問題 4: ユーザーがテキストを入力し、名前を付けてパスを設定した xml ファイルにテキストが書き込まれると、彼は休暇に出て、2 週間後に保存したファイルを開いてプロジェクトで再び作業します。xml に保存されたすべてのデータは、さまざまなユーザー入力コンポーネントに書き戻す必要があります。これにより、彼は自分のプロジェクトで作業を続けることができます。正直なところ、この主題に関するサンプルとチュートリアルがいくつかありますが、これも 1 ページのみからのものです。複数タブのパースペクティブではありません。

問題 5: ユーザーが開始時に入力したテキストを削除および/または変更した後、テキストエリアとテキストエディターにさらにテキストを書き込み、ファイル - 保存ボタンをクリックします。xml ファイルまたは使用する必要があるものはすべて、古いファイルを上書きするすべての変更で更新および保存する必要があります。

問題 6: ユーザーが入力したデータは、最終的に 400 ページの本になります。このデータは明らかに大部分が richtexteditor コンポーネントにあるため、データベースや xml など、どのような保存方法を使用する場合でも、このデータをすべて格納できる必要があります。

たとえば、Microsoft パワーポイントを使用している場合、さまざまなユーザー入力を含む複数のページがあり、[ファイル] - [保存] をクリックすると、すべての入力が 1 つのファイルに保存されます。ユーザーがその保存されたファイルを開くと、すべてのコンテンツが元の場所に読み込まれ、入力を変更および操作して、再度保存することができます。これは、ソフトウェアプログラムのすべてであるため、アドビや他のソフトウェアが最初に教えることの1つだと思っていたでしょう。しかし、残念ながら、デスクトップ アプリケーション用の adobe air に関するこのテーマに関するチュートリアルは非常にまれです。

私の約束は、誰かがこれについて私を助けることができるか、これを適切にカバーするチュートリアルがそこにある場合、私が一歩一歩進むにつれて、他の初心者のためにこれに関するチュートリアルを書くことです.

4

1 に答える 1

1

あなたが直面している主な問題は、UI 入力から XML データへの (およびその逆の) 変換だと思います。これは、純粋に技術的な問題ではなく、アーキテクチャの問題であり、情報を見つけるのに苦労している理由を説明している可能性があります。

プレゼンテーション モデル

ユース ケースを解決する方法はたくさんありますが、最終的にはプレゼンテーション モデルが必要です。これは、特定のビューと同時に使用されるモデル クラスです。さまざまなプレゼンテーション モデルと実際のデータ モデル (この特定のケースでは XML データ構造として表されます) の間を相互に変換できます。これは少し抽象的ですが、大まかに説明します。これからお見せするのは、考えられる多くのアプローチの 1 つにすぎないことを理解しておいてください。これが一番伝わりやすいと思います。

PMクラス

まず、ビューごとにプレゼンテーション モデルを作成する必要があります。つまり、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;
}

プロパティが Bindable とマークされていることに注意してください。次の段落でその理由を説明します。

クラスを見る

次のようなビュー クラスを作成できます。

<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 の値を読み込んでプレゼンテーション モデルに書き込む方法がわかりましたか?

変換

あとは、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);

ディスクへの書き込み

以前に書いたこの回答を読んでください:
AIR のローカル アセット フォルダーに XML を保存/保存する

于 2012-09-01T13:41:38.993 に答える