問題タブ [observers]

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 投票する
6 に答える
3188 参照

ruby-on-rails - オブザーバーでセッションにアクセスすることをお勧めしますか?

Ruby on Rails アプリケーションでユーザーのアクションをログに記録したいと考えています。

これまでのところ、更新および作成後にデータベースにログを挿入するモデル オブザーバーがあります。ログに記録されたアクションを実行したユーザーを保存するために、セッションへのアクセスが必要ですが、それは問題です。

まず、MVC モデルを壊します。第 2 に、ハック的なものから風変わりなものまでさまざまな手法があり、実装を Mongrel サーバーに結び付けることさえあるかもしれません。

取るべき正しいアプローチは何ですか?

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

design-patterns - サブジェクトが巨大なコンテナである場合、どのようにしてオブザーバーパターンを効率的に実装しますか?

オブザーバーパターンは誰もが知っています。状態の変化をオブザーバーのリストに通知して更新できるサブジェクトがあります。ここで、観察したいサブジェクトがコンテナーであり、コンテナー自体、つまり要素の追加と削除、および含まれている要素、つまりコンテナー要素の状態の更新を観察したいとします。

コンテナに大量のオブジェクトを格納するときに要素の挿入と削除が高速になるように、更新メカニズムをどのように実装しますか?特に、

  • オブザーバーのローカルコピーで同じタイプのコンテナーを使用しますか?
  • オブザーバーが使用すべきコンテナの賢い選択はありますか?(たとえば、リンクリストを監視している場合でも、常にバランスの取れたツリーを使用する方が速いでしょうか?)
  • イテレータを監視対象のコンテナに、イテレータをオブザーバのコンテナにすばやく変換するにはどうすればよいですか?(配列の場合は重要ですが、リンクリストの場合は難しいですか?)

たとえば、コンテナがリンクリストの場合、一定時間で要素を挿入できます。m人のオブザーバーがn個の要素を含むリストを反復処理する必要がある場合、更新にはO(n * m)の予想時間がかかります。

コンテナが配列の場合、要素の変更には一定の時間がかかり、要素のインデックスを渡す場合はm個のオブザーバーの更新にO(m)がかかり、オブザーバーが配列を反復処理する必要がある場合はO(n * m)がかかります。

それが役立つ場合は、次の例を検討してください。

例1.オペレーティングシステムを作成しています。観察したい主題は、ファイルシステムとそのファイルです。ビューは、ファイルエクスプローラー、インデクサー、およびその他のアプリケーションです。ファイルが追加、削除、または変更されたときにオブザーバーを更新したいとします。

例2.ニューヨークのサイズの都市を処理できるはずの名簿アプリケーションを作成しています。あなたが観察したい主題はあなたの記録の入れ物です(その住所、電話番号、電子メールを持っている人...)。オブザーバーはいくつかのビューであり、レコードを追加、削除、または変更すると自動的に更新されます。(53日に住んでいる人のリストを含む1つのビューと、姓がDoeである各人の地図上の別の描画ドットをイメージできます)。

ディレクトリサブツリー全体が削除された場合、または「53rdSt」が「DijkstraSt」に名前が変更された場合をどのように処理しますか?

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

ruby-on-rails - Rails User モデルには has_many のアクティビティ (オブザーバー) がありますが、観察する必要もあります

さまざまなサイトを記録する既存のActiveRecord::Observerモデルで問題が発生しています。他のモデルに使用するのと同じモデルでクラスを試すまで、すべてがうまく機能していました。次のことを考慮してください。ActivitiesUserobserveUserActivityobserve

上記はうまくいきました。のクエリは、User.activitiesの行を返しますComment Activities。のメソッドに追加:userし、モデルを に変更するとすぐに、そのインスタンスに関連するアクティビティである行のみが返され、何も返されません。observeActivityObserverhas_many :activitiesUserhas_many :activities, :as => :itemUser.activitiesUserComments

どうしてこれなの?これを期待どおりに機能させるにはどうすればよいですか?

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

java - Javascriptからjava.util.Observableを使用する方法は?

「FileCatalyst」JavaFTPアプレットを標準のDrupalフォームと統合するDrupalモジュールを構築しています。ファイル転送が完了したときにフォームを送信するためのフックを実装しています。現在、setTimeout()呼び出しを使用してアプレットをポーリングしていますが、このメソッドは、状態の変化が速すぎると、状態の変化を見逃す可能性があります。

ただし、FileCatalystオブジェクトはjava.util.Observableを継承しているため、アプレットのオブザーバーを登録して、状態変更の通知を受け取ることは明らかに可能です。これを実装する方法を知りたいのですが。

Javascriptのdocument.FileCatalyst.addObserver(obj)関数を使用して、これらの状態変更をJavascriptオブジェクトに送信できますか?addObserverに何を渡しますか?オブザーバーを作成するにはどうすればよいですか?状態変更通知を受信するために、オブザーバーはどのようなメソッドを実装する必要がありますか?

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

ruby-on-rails - Rails アプリケーション内からデータベース テーブルの外部変更を監視する

Rails アプリケーションにいくつかの非 Rails モデル テーブルを統合しています。すべてが非常にうまく機能します。モデルをセットアップする方法は次のとおりです。

このようにChangeして、既存のすべてのレコードにモデルを使用できますfind

レコードがテーブルに追加されたときに、何らかの通知を実行したいと思います。モデルは経由Change.newで作成されないため、Change.save使用ActiveRecord::Observerはオプションではありません。

新しいレコードが追加されるたびに、Rails コードの一部を実行する方法はありますか? 私は見ましdelayed_jobたが、それを設定する方法を理解できませんでした。ジョブが最後に実行されてから作成されたすべての行を選択し、各行のそれぞれの Rails コードを呼び出す cron ジョブを中心に展開すると思います。

更新現在 Java のWhenを見ていると、「cron 部分から Rails コードを実行する」を解決できるようです。

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

ruby - datamapperオブザーバー内の古い状態値にアクセスするにはどうすればよいですか?

dm-observerを使用してdmモデルを監視していますが、モデル内の状態の変化に基づいていくつかのアクションを実行する必要があります。更新された状態値を格納するために@stateが使用されていることはわかりましたが、古い状態値にアクセスする方法を理解できませんでした。以下の例では「old_state」を使用しましたが、明らかにそれは機能しません。

0 投票する
5 に答える
2373 参照

c++ - データを「一般的な」オブザーバーに渡す方法は? 引数として、または単一の構造体として?

私は汎用オブザーバー メカニズムを従来の C++ アプリケーションに追加するのに忙しくしています (Visual Studio 2010 を使用していますが、.Net は使用していないため、.Net デリゲートは問題外です)。

設計では、アプリケーション固有の部分を一般的なオブザーバー メカニズムからできるだけ分離したいと考えています。

オブザーバーを実装する最も論理的な方法は、次のようになります。

オブザーバーのタイプ (IDoThisObserver、IDoThatObserver、...) ごとに、メソッド (handleDoThis、handleDoThat) の引数は異なります。

次のように、オブザーバーを格納する一般的な方法に残っているもの:

オブザーバーの呼び出しは、オブザーバーの種類ごとに引数が異なるため、一般化できません。

別の方法は、次のように、すべての引数を 1 つの引数に「パック」することです。

次に、次のように、より一般的なオブザーバーを定義します。

そして、これらのオブザーバーのコレクションは次のようになります。

これで、すべてのオブザーバーの呼び出しなど、さらに多くのロジックをこの ObserverContainer に一元的に追加できます。呼び出しの「開始者」は、通知構造を作成して入力するだけで済みます。

複数の種類のオブザーバーから継承したいクラスは、次のようにする必要があります。

これらのアプローチ (複数の明示的な引数を持つオブザーバーまたは 1 つの構造体引数を持つオブザーバー) のどれが最適だと思われますか? これらのアプローチのいずれかに利点または欠点はありますか?

編集:私は代替アプローチをもう少し調べました.Slot/Signalアプローチは別の良い候補のようです. Slot/Signal に知っておくべき重要な欠点はありますか?

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

macos - Mac OS X - アプリの起動を監視しますか?

Mac OS X 用のシンプルなメニューバー アプリを作成したいと考えています。ユーザーは、Safari が開いているときにのみそのアプリを使用したいと考えています。メニューバーが不必要に乱雑にならないように、Safari が開いているかどうかに応じて、メニューバーのアイコンを隠したり表示したりしたいと考えています。

私のアプリが登録できる通知はありますか?私が想像できる唯一の回避策は、実行中のプロセスをポーリングし、Safari が起動されているかどうかを確認することですが、それは私の問題を解決するエレガントな方法ではないようです...

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

php - Magento:バンドルされた製品からオプション情報を取得する方法は?

オプションとして3つの仮想製品を含むバンドル製品があります。

カートにアイテムが追加されたときにイベントをリッスンしているオブザーバーがいて、製品を見るときに選択したオプション情報を取得する方法を理解するのに苦労しています。オブザーバーの開始は次のようになります。これ:

$ product-> getSku()を呼び出すと、バンドル製品のSKUが返されます。選択したオプションのSKUを取得できるようにしたいと思いますが、その方法がわかりません。

ありがとう!

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

design-patterns - これは「循環参照」と呼ばれますか?

オブザーバー パターンを使用すると、そのクラス ダイアグラムに基づいて、SUBJECT が OBSERVER への参照を使用することがわかります。一方、OBSERVER は、自身を登録または削除するために SUBJECT への参照を持っています。

これは「循環参照」ですか?