ダーツでイベント可能な型を作成する機能が組み込まれていますか?
私の Javascript アプリケーションでは、Eventable というクラスを使用して、次の機能を提供しています。
var dog = new Dog() //where Dog inherits from Eventable
var cat = new Cat() //where Cat inherits from Eventable
//use 'on' to listen to events
cat.on(dog, 'bark', cat.runaway); //assuming Cat has a method runaway on its prototype
//use fire to launch events
dog.fire({type: 'bark'}); //this causes cat.runaway(event); to be called
javascript で非常に一般的なパターンです。オブジェクトを src と心の中で分離しておくのに役立つので、気に入っています。
on
メソッドを使用すると、所有者 (上記)、クライアント (上記)、タイプ (上記)、機能 (上記)new EventContract
に基づく一意のキーを持つ が作成されます。この一意のキーにより、重複したs が作成されないようにすることができますが、さらに重要なことは、オブジェクトが持つすべての s の簡単に検索できるコレクションを保持できるため、次のように呼び出すことができます。cat
dog
'bark'
cat.runaway
EventContract
EventContract
cat.dispose();
のすべてのイベント コントラクトcat
が破棄されるため、cat へのすべての外部参照が削除され、cat を GC できるようになったと確信しています。
cat.on(dog, 'bark', cat.runaway);
しかし、次のようなことを行うと、新しい関数が生成されて囲まれ、dart の標準関数オブジェクトから取得できる唯一の一意のキーはその hashCode になるため、Dart でこの機能を実装するのは難しいと思います(){cat.runaway();}
が、それはつまりjavascript で発生するように、元の関数への参照を処理するのではなく、別の一意のクロージャーを作成したため、思い出すcat.on(dog, 'bark', cat.runaway);
ことができ、新しいものを作成します。EventContract
ダーツでこのパターンを達成する方法はありますか?