5

JavaScriptにカスタムオブジェクトがあります:

function Graph (dataType, provider){
   this.dataType = dataType;
   this.provider = provider;
}

「new」を介してこのオブジェクトをインスタンス化し、このオブジェクトのプロパティへの変更を追跡する必要がある可能性のあるコードの他の部分に渡します。

グラフオブジェクトのプロパティが変更されたときに、そのオブジェクトの他のすべてのコンシューマーに通知されるようにします。C#のような言語では、イベントを発生させるセッターがあります。カスタムJavaScriptオブジェクトでイベントを作成する適切な方法は何ですか?

ありがとう。

4

3 に答える 3

3

JQueryを使用すると、いつでも、任意のタイプのイベントを作成し、任意のオブジェクトにアタッチできます。

function Graph (dataType, provider){
   this.dataType = dataType;
   this.provider = provider;
}

var g = new Graph;

g.dataType = "whatever1";
g.provider = "whatever2";
g.event = $.Event("mywhateverEvent");
g.myOwnProperty2 = $.Event("thisisAnEventToo");

これで、次のようなものを使用して、イベントをさらに操作し、そのイベントに対してやりたいことを行うことができます。

g.event = <whateverCodeIWant>;
g.myOwnProperty2 = <whateverCodeIwant2>

コンストラクターが好きなようですので、次のようにすることもできます。

function Graph (dataType, provider, evt){
   this.dataType = dataType;
   this.provider = provider;
   this.evt = evt
}

var myevt =  $.Event("whateverEvent");
myevt = <codeTomanipulatemyEventFurtherNowIfIWantTo>;
var g = new Graph("datawhatever", "providerwhatever", myevt);
$("whateverIWant").bind(myevt); 
//or whatever other binding - it will bind to that very event
$("whateverIWant").bind(g.evt);//equivalent to above line- binds to same event object
于 2012-09-04T04:37:20.970 に答える
1

Object.definePropertyはあなたが望むものです(デスクトップでIE<9またはFirefox<4をサポートしていなくても大丈夫だと仮定します)

function Graph (dataType, provider){
   this._dataType = dataType;
   this._provider = provider;
}

Graph.prototype = {
    get dataType() {
        return this._dataType;
    },
    set dataType(data) {
        yourEventDispatcher.trigger("datatype modified");
        this._dataType = data;
    },
    get provider() {
        return this._provider;
    },
    set provider(data) {
        yourEventDispatcher.trigger("provider modified");
        this._provider = data;
    }
};

参照:ダミー用のJavascriptゲッターとセッター?

于 2012-09-04T04:44:14.587 に答える
0

https://github.com/Wolfy87/EventEmitterなどのEventEmitterライブラリを使用します。完全なガイドはここにありますが、簡単に言うと、EventEmitter javascriptファイルをロードしてから、次のようなことを行います。

Graph.prototype = Object.clone(EventEmitter.prototype);

その後、あなたはすることができます

var g = new Graph("Blah", "Blah");
g.emitEvent('foo');
于 2012-09-04T04:51:30.340 に答える