問題タブ [cairngorm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1057 参照

flash - Cairngorm SequenceTask + URLLoader は、ユーザー インタラクションが欠落しているため、SecurityError をスローします。

アップロードの進行状況を表示しながら、複数のクライアント側で生成された画像 (ファイルではないため、FileReference を使用できません) をアプリケーションにアップロードさせようとしています。これは、本来よりもはるかに難しいことが証明されています。Cairngorm Task ライブラリを使用して、クライアントで生成されたイメージに対して次の手順を実行しています。

  1. ステージの領域のコンテンツを描画する BitmapData オブジェクトを生成します
  2. プログレスバーを表示するために、画像を JPEG として非同期的にエンコードします ( http://dgrigg.com/blog/2009/03/05/as3-jpegencoder-and-big-images/を参照) 。
  3. 進行状況を表示するために、イメージを非同期的にアップロードします (チャンク、http: //soenkerohde.com/2010/01/chunk-file-upload/ を参照)。

ユーザーがボタンをクリックすると、SequenceTask が開始され、エンコーディングは魅力的に機能しますが、アップロード タスクが発生すると、次のエラーで炎上します。

SecurityError: エラー #2176: ポップアップ ウィンドウを表示するアクションなど、特定のアクションは、マウスのクリックやボタンの押下など、ユーザーの操作によってのみ呼び出される場合があります。

ユーザーの介入なしに URLLoader.load アクションを開始できないため、これが発生していると思います。ユーザーボタンをクリックしていても、物事が非同期的に発生し始めるため、このクリック イベントはオリジネーターとは見なされなくなっていると思います。

これがマウス クリックの結果であることを URLLoader に知らせる方法はありますか? これは、チャンクアップロードが機能するために不可欠です。後続のチャンクはすべて新しい URLLoader も開始するため、リファレンスのチャンクアップローダーが実際に機能するかどうかは 100% 確信が持てません。最初は単純なコードだけを実行してみるかもしれません。

アイデアをありがとう。

0 投票する
2 に答える
467 参照

apache-flex - ケアンゴームの障害ハンドラー

Cairngorm アーキテクチャによると、各サービスのすべてのコマンド クラスに常に障害ハンドラーがあります。

すべてのサービスの Fault ハンドラ イベントを処理する単一のクラスを作成する方法。

0 投票する
4 に答える
3757 参照

apache-flex - PopUpManager でイベントを行う最良の方法は?

PopUpManager を使用して子を追加し、その子からイベントをディスパッチすると、バブルがアプリケーション (メイン アプリケーション) の上部にバブルしないようです。

例えば:

次に、ポップアップで次のことを行います。

「testEvent」のparentApplication(ルート.mxml)にeventListenerがありますが、起動しません。このため、イベントをディスパッチし、ModelLocator でイベントをリッスンしています (cairngorm を使用)。多くの場合、イベントリスナーを手動で削除する必要があるため、これは明らかに理想的ではありません。

何か案は?

ありがとう!

0 投票する
2 に答える
442 参照

apache-flex - プレゼンテーションモデルを使用してFlexに要素を追加する

私は別の開発者によって書かれたいくつかのFlexコードをリファクタリングしており、ActionScriptをMXMLから分離したいので、PresentationModelアプローチを実装しています。私が見つけた問題の1つは、元のActionScriptコードがMXMLから要素を追加/削除することです。

ハンドラー関数がモデルをチェックし、値が正しい場合は、ビューから要素を作成または削除します。プレゼンテーションモデルをビューの広告要素に配置し、それでも私が目指しているこの緩い結合を維持するための最良の方法は何ですか。

プレゼンテーションモデルがディスパッチする単純なイベントと、追加する要素の詳細を渡すためのビューリストを使用することを考えていました。別の解決策はありますか?

ありがとう

スティーブン

0 投票する
1 に答える
143 参照

apache-flex - 質問のバインド

こんにちは
、コードがあります。私はケアンゴームを使っています。
簡単なコマンド、コントローラー、イベント、modelLocator、モデル、およびビューを作成します。
私の見解では、モデルから変数「値」を持つ textInput バインドがあります。
<s:TextInput id="textInputName" width="100%" text="{modelLocator.model.value}" valueCommit="modelLocator.model.value = textInputName.text"/>
<mx:HRule width="100%"/>
<s:Button width="100%" label="Reset" click="reset()"/>
開始すると、textInput のテキストはモデルの「値」の値になります。
textInput の値を変更すると、モデルの「値」が変更されます。
しかし、リセットを行うと、イベントが送信され、コマンドはモデルの「値」を "" に設定しますが、textInput のテキストは変更されません。
なんで?モデルの「値」の値が変化するので、textInput の値は変化しませんか?
そうでない場合、それを行うために何をしなければなりませんか?

0 投票する
1 に答える
77 参照

apache-flex - Cairngorm ベースのアプリケーションのレイヤーの複雑さを軽減する

SWFAddress のようなツールを巧妙な方法で使用して、既存のクライアント/サーバー アーキテクチャを軽減できるでしょうか。REST のようなパターン マッピングなどを導入する可能性もあります。

私が現在行っていることは、すべてのケアンゴームのガイドラインに従っていることです。これは、すべて意味のある一連のコマンドにすでにつながっていますが、ビジネス デリゲートなどを含めて、アプリケーションの拡張とリファクタリングに苦労しています (実際には、レイヤーが役立つはずでしたが、タイトです...おそらく私はそれを正しく行っていないことを認めます)。

とにかく、私が考えたのは、飛んでいるアプリケーションイベントの数と、それらに応答するコマンドの数を何とか減らすことでした. 実際、レイヤーの複雑さを理解できれば、ビューをロジックと結合してもまったく問題ありません。

つまり、おそらく、ボタンのクリックを URL パターンにバインドできます (または、SWFaddress を使用して URL をグローバルに変更できます)。もう一方の端では、URL の変更を待ち、それを再フォーマットして、必要なマッピングを念頭に置いたサービス デリゲートに渡します。これにより、呼び出すメソッドを認識したり、URL を直接渡すこともできます。 HTTPS サービスに。次に、デリゲートはサーバーの応答を処理し、モデルを更新します。これにより、バインディングを介してビューが更新されます。

コマンドを完全に捨てるつもりはありません。内部対話 (クライアント自体内) のスケジューリングには適していると思いますが、サーバーとの通信には使用しないでください。

私は正しい道を進んでいますか?

0 投票する
2 に答える
384 参照

apache-flex - ModuleMessageInterceptor と MessageInterceptor

cairngorm モジュール ライブラリと Parsley を使用して、Flex でアプリケーションを開発しています。

Parsley のドキュメントの第 5 章には、「メッセージをハンドラーに渡す必要があるかどうかを判断したい場合に、インターセプターが役立つ場合があります」と記載されています。

ModuleMessageInterceptor を使用する場合、上記は当てはまりません。つまり、私の MessageHandler は MessageInterceptor の前にメッセージを受け取ります。

誰かが回避策を知っていますか?

よろしく、

ファディ

0 投票する
3 に答える
444 参照

apache-flex - Flex-Cairngorm / Hibernate-EAGERフェッチ戦略は無意味ですか?

できるだけ簡潔にしようと思います。アプリにFlex/Hibernateテクノロジーを使用しています。FlexにはCairngormマイクロアーキテクチャも使用しています。私は初心者なので、CaringormのModelLocatorの目的について何か誤解している可能性があります。次の問題があります...

次のデータモデルがあるとします。

ユーザーは多くのトピックを開始でき、トピックには多くのコメントを含めることができます。たとえば、これは非常に単純なモデルです。Hibernateでは、単方向のUSER->TOPICおよびTOPIC->COMMENT関係にEAGERフェッチ戦略を使用します(ここでは、ベストプラクティスなどについての質問はありません。これは、問題の単なる例です)。

私のModelLocatorは次のようになります。

私は熱心なフェッチを使用しているため、データベースにアクセスすることなく、Flexクライアント上のすべてのオブジェクトグラフを「ウォークスルー」できます。一部のドメインインスタンスを挿入、更新、または削除する必要がない限り、これは問題ありません。しかし、それが発生すると、同期に関する問題が発生します。

たとえば、 UserListViewからユーザーの詳細を表示したい場合、user(actor)がリストでそのユーザーを選択すると、UserListで選択されたインデックスを取得し、ModelLocatorのusers ArrayCollectionから選択されたインデックスで要素を取得し、選択されたものの詳細を表示しますユーザー。

新しいユーザーを挿入したい場合は、OK 、そのユーザーをデータベースに保存し、IResponder結果メソッドでそのユーザーをModelLocator.usersArrayCollectionに追加します。

しかし、一部のユーザーに新しいトピックを追加したい場合、それでもEAGERフェッチの便利さを使用したい場合は、ユーザーリストを再度リロードする必要があります...そして選択したユーザーにトピックを追加するには...そしてユーザーが一部のユーザーにいる場合他の場所(間接的に)、私はそこにもトピックを挿入する必要があります。更新はさらに最悪です。その場合、私はいくつかのロジックを書く必要があります...

私の質問:CairngormでModelLocatorを使用するこの良い方法はありますか?言及されているため、EAGERフェッチはどういうわけか無意味であるように私には思えます。EAGERフェッチを使用する場合、Flexクライアントでの同期が大きな問題になる可能性があります。ドメインモデルを操作するには、常にデータベースにアクセスする必要がありますか?

編集: 私は自分自身を十分に明確にしなかったようです。すみません。

わかりました。テクノロジースタックでもSpringを使用し、フレックス/スプリング(デ)シリアライザーでDTO(DVO)パターンを使用していますが、データベースの状態との同期をどのように維持するかを指摘しようとしているので、それを避けたかったのです。フレックスアプリ。マルチユーザーシナリオやポーリング/プッシュのトピックについては触れていません。これは、標準の要求応答メカニズムを使用しているため、おそらく私の解決策です。これは私にとって概念的な問題のように思われるため、具体的なコードは提供しませんでした。クラス名や変数名などに使用する疑似名を説明するために、標準のCairngorm用語を使用しています。

もう一度「単純化」してみます。上記のドメインを管理するためのフレックスクライアント(各ドメインクラスのCRUD)、ListOfUsersView(ユーザーの基本情報を含むユーザーのリストを表示)、UserDetailsView(ユーザーの詳細と各トピックの削除オプションを含むユーザートピックのリスト)、InsertNewUserTopicView(新しいトピックを挿入するためのフォーム)など。

一部の情報を表示する各ビューは、ModelLocatorの状態変数と同期されます。次に例を示します。

ビューステート遷移は次のようになります。

したがって、ListOfUsersViewの[詳細]ボタンをクリックすると、ロジックで、 ListOfUsersで選択した行のインデックスを取得します。その後、ユーザーからUserVOオブジェクトを取得します。前述のインデックスでModelLocatorのArrayCollectionを取得し、その後、そのUserVOオブジェクトをselectedUserとして設定します。:ModelLocatorのUserVOとその後、ビューの状態をUserDetailsView(ユーザーの詳細とselectedUser.topicsが表示されます)に変更します。これは、ModelLocatorのselectedUser:UserVOと同期されます。

次に、 UserDetailsViewの[新しいトピックを挿入 ]ボタンをクリックすると、InsertTopicViewフォームが表示されます。データを入力し、[トピックの保存]をクリックします(保存が成功すると、UserDetailsViewが再度表示されます) 。問題が発生します。

EAGERでフェッチされたオブジェクトのため、前述の遷移でデータベースにアクセスしませんでした。そのため、選択したユーザーに新しいトピックを挿入するときに気にする必要がある場所が2つあります。1つはユーザー内のselectedUserオブジェクトのインスタンスです。 :ArrayCollection(私のロジックはそのコレクションからユーザーを選択してUserDetailsViewに表示するため)、2番目はselectedUser:UserVO(保存操作が成功した後に来るUserDetailsViewを同期するため)です。

したがって、再び私の質問が発生します...データベースの状態をフレックスクライアントと同期するために、保存後にusers:ArrayCollectionとselectedUser:UserVOをリロードする必要がありますか?データベースにアクセスし、プログラムで更新する必要のあるすべての場所を渡しますか...?

EAGERでフェッチされたオブジェクトとそれらの関連付けは適切ではないように思われます。私が間違っている?

または、「単純化」するために:)もう一度、前述のシナリオで何をする必要がありますか?だから、あなたは「トピックを保存」ボタンをクリックすることを処理する必要があります、そして今何...?

繰り返しますが、私はこれと混同しているので、これを可能な限りプラスチックとして説明しようとしています。だから、私の長いポストを許してください。

0 投票する
2 に答える
683 参照

apache-flex - フレックスオンラインアプリケーションをデスクトップアプリケーションに変える方法は?

私は数年間、flex (cairgorn) + spring + blazeDataservice アプリケーションで blazeDataservice を使用してバックエンドに接続してきました。それを定期的に使用します。

私の国のインターネット帯域幅は改善されていません。実際には悪化しています。そのため、アプリが大きくなり、帯域幅が悪化するため、読み込みが日ごとに遅くなります。

クライアントを人々のコンピューターにインストールするにはどうすればよいか疑問に思っていました.Flexオンラインアプリを書き換えずにデスクトップアプリに変えます. 正しい方向に向けてくれる人だけが必要です.2つのオプションについて考えていました:

1.- adobe air に変えることはできますか? アドビエアデスクトップではありませんか?

2.-人々のデスクトップで実行されるフラッシュですか?

今日と同じように、ホスト スプリング バックエンドに対してすべてが機能する必要があります

どうもありがとうございました!

0 投票する
2 に答える
170 参照

apache-flex - MVC の M はどこにありますか?

これから行う質問は、Flex プラットフォーム (および MVC を実装するふりをしているいくつかのフレームワーク) に関する私の最新の作業に触発されたものですが、さまざまな専門知識を持つ人々を巻き込むのに十分一般的なものだと思います。

かなり長い間、私は Cairngorm のようなフレームワークによって提案されたパラダイムに従ってきました -

ビュー、シングルトン モデルのプロパティへのバインド、およびイベントのディスパッチ。イベントはフロント コントローラーによってキャッチされ、結果としてコマンドが実行されます。コマンドは、サービスを呼び出し、データを取得し、モデルを提供します。モデルはバインディングを通じてビューを暗黙的に更新します。

次のデータ構造にたどり着くまでは、すべてうまくいきました。

ユーザーには多くのフォロワー (ユーザー) がいます 多くのユーザーがフォローしています 多くのユーザーがたくさんの写真を持っています 多くの場所をフォローしています

写真には多くのいいね(ユーザー)がいる 場所がある クリエイターがいる 関連写真が多い

場所には多くの写真があり、多くのフォロワーがいます

繰り返しになりますが、Cairngorm によって提案されたアイデアを使用しても問題ありません。たとえば、currentUser、currentLocation、および currentPhoto を持ち、それらにバインドするだけです。

問題はビュー自体にあります。想像できるように、一連の複雑な「ページ」ビューがあり、ドリルされた情報として提供されます。たとえば、場所のページには、最新/人気の写真のグリッド、フォロワー用のパネル、それらの写真が撮影された座標に基づく地図が表示されます。問題は次のとおりです。

明らかに、パフォーマンス上の理由から、特定の場所をフォローしているすべてのユーザー、または場所にある可能性のあるすべての写真を取得することはできません。一部はプリフェッチしており、その他はオンデマンドでサーバーから提供されます。

たとえば、フォロワーのアバターページをクリックすると、そのユーザーの写真の小さなグリッド、または sth を取得する必要があります。しかし、モデルには currentUser が 1 つしかありません。

これは、なぜ中央のシングルトン モデルにバインドする必要があるのでしょうか?という疑問につながります。すべてのビューを一種のレスポンダーに変えることはできませんか。つまり、ビューは再び偶数をディスパッチしますが、今回はモデルを提供する代わりにコマンドが呼び出し元のビューを直接提供します。

すべてのビューが IResponder を実装するため、結合はありません。このコマンドは、呼び出されたイベントから取得する IResponder のみを必要とします。

私が考える「モデル」は別の役割を果たします。これはキャッシュのようなもので、ローカル ストレージ用のグローバル ディクショナリのようなもので、サーバーから要求を行う前にコマンドによってチェックされます。このようにして、サーバーへの呼び出しをいくつか節約できますが、データが非常に散発的である場合、この同じデータが他のデータと一緒に何度もフェッチされます。(キャッシュにいくつかのユーザーデータがあるかもしれませんが、一般的に、一貫性のために、フォロワーデータの一部が既にあるかどうかに関係なく、サーバーを呼び出してフォロワーデータのコレクションを取得します)

これらのアイデアに関するフィードバックをお待ちしております