2017-01-25 4 views
1

カスタムイベントを発行するカスタムDojoクラスを作成しようとしていますが、そのイベントを呼び出し側のクラスからリッスンしようとしています。カスタムクラスからカスタムイベントを放出し、Dojo 1.11でそれを聞くにはどうすればいいですか?

私はこのための完全なサンプルを見つけられませんでした、そして、私はここで立ち往生しています。私は次のことを試してみた

私のカスタムクラスでは、私は次のコードを持っている:

on.emit(this, "PointFound", { 
      Msg:"Found a point Within minDistance", 
      point:selctedPoint 
      }); 

これは、任意のエラーが発生することはありません。私が立ち往生しているところは、それを聞く方法です。

私は(適切にクラスを初期化した後)してみてください:私は(適切にクラスを初期化した後)しようとするとError: Target must be an event emitter

  on(findUtilInstance,"PointFound", function(e){ 
       console.log(e); 
      }); 

私はエラーメッセージが表示されます

  findUtilInstance.on("PointFound", function(e){ 
       console.log(e); 
      }); 

私はエラーが発生します:TypeError: findUtilInstance.on is not a function

Dojo 1.11.2でカスタム・イベントを起動して受信する正しい方法は何ですか?

myWidget.on("customevent", function(data) { 
    console.log(" received notification "+data); 
}); 

代わりにdojo/_base/declareからあなたを拡張する場合は可能性があります。たとえば、あなたが使用できる)、それが唯一のDOMノードのためだと、それはあなたがdijit/_WidgetBaseから延びている場合は、上と呼ばれる方法は、(そこの作品

+0

あなたの代わりに道場/トピックの使用を検討していますか? – GibboK

+0

@GibboK私はdojo/topicに精通していませんが、私はこのカスタムクラスのインスタンスを複数持つことになります。異なるインスタンスのイベントを購読し、トピックを使用してそれらを区別することはできますか? –

+0

はい、可能ですが、私はいくつかの利点があるので、このパターンを評価することを提案することができます。 – GibboK

答えて

1

dojo/ondojo/topicの使用を検討し、Publish-subscribeパターンを実装してください。 「クラス/モジュール」が互いに通信できるようにするもの。あなたのクラスのいずれかまたは複数のインスタンスに

  • 放送(公開)メッセージ(イベント/トピック):

    dojo/topic provides a centralized hub for publishing and subscribing to global messages by topic. Topics can be subscribed to by using topic.subscribe(), and messages can publish by using topic.publish().

    基本的には、のためにdojo/topicを使用することができます。

  • それぞれのインスタンスから、あなたのメッセージを聞いて(購読して)あなたのロジックをそこに適用することができました。

require(["dojo/topic"], function(topic){ 
    topic.subscribe("some/topic", function(){ 
     console.log("received:", arguments); 
    }); 
    // ... 
    topic.publish("some/topic", "one", "two"); 
}); 
関連する問題