5

私のアプリはRaphaëlを使用してオブジェクトのコレクションをページにドロップしています。各clickオブジェクトには、JSON経由で読み込まれたときにオブジェクトにアタッチされたデータを使用するハンドラーがバインドされています。それはすべて正常に機能しています。

現在、Cucumberを使用してテストカバレッジを追加しようとしています(はい、最初にテストを作成する必要があることはわかっています。次回は作成します)。最初のオブジェクトのクリックをトリガーして、そのオブジェクトに関連付けられているページが読み込まれることをテストする必要があります。そのオブジェクトに適切なSVGパスを見つけて、それに対してイベントをトリガーしようとしましたclickが、それは機能しません。clickまた、各Raphaëlセットをグローバルに利用可能なオブジェクトにドロップしようとしましたが、適切なオブジェクトに対してRaphaëlイベントをトリガーする方法を理解できませんでした。

いくつかの具体的な質問をするために:

1)Raphaëlイベントを手動でトリガーするにはどうすればよいですか?

2)Raphaëlセットが所有するSVG要素への参照がある場合、そのイベントをトリガーすることは可能ですか?

3)そうでない場合、ラファエルが保持しているセットの現在のコレクションにアクセスすることは可能ですか?

4

2 に答える 2

8

このカスタムメソッドをラファエル要素に追加できます。

Raphael.el.trigger = function(eventName){
    for(var i = 0, len = this.events.length; i < len; i++) {
        if (this.events[i].name == eventName) {
            this.events[i].f.call(this);
        }
    }
}

次のように使用できます。

var r = paper.rect(0,0,100,100).attr({"fill": "#f00"});

r.click(function(){
    this.attr("fill": "#0f0");
});

r.trigger("click");
于 2014-01-09T13:19:16.533 に答える
4

最初にラファエルオブジェクトを見つけ、次にDOMをトラバースすることで、それらのイベントハンドラーの関数を見つけることができることがわかりました。私の場合、クリックイベントは0番目のイベントでした。

だからそれをトリガーするために私がしたのは:

 raphobj.events[0].f();

ただし、クリックイベントで「this」を参照すると機能しないため、注意してください。

于 2012-08-30T15:33:05.750 に答える