1

フラッシュ開発者として、私はAS3がmootoolsで提供するのと同じ柔軟性を持たせようとしています。

私は簡単なことをしようとします。保護されるイベントハンドラー関数を作成します。私はインライン関数を書くのが嫌いなので、次のように書きます。

//CLASS DEFINITION AS USUAL
    initializeEvent:function (){


    if (this.options.slider) this.options.slider.addEvents ({

        mousedown:function (e){

            this.sliderDownHandler();
            //throw an error because sliderDownHandler is set to protected

        }


    });

},

update:function (){

    this.fireEvent('update');

}.protect(),

sliderDownHandler:function (e){

    this.update();
    console.log ('yeah it down')

}.protect();

.protect()がないと、ハンドラーは期待どおりに機能します。

.protected()でこの目標を達成することは可能ですか?

どうもありがとう!

4

1 に答える 1

1

できますよ。保護された問題ではなく、バインディングエラーがあります

mousedown:function (e){
    this.sliderDownHandler();
    //throw an error because sliderDownHandler is set to protected
}

番号。thisにバインドされるため、エラーがスローされ、イベントが発生しました-これは、メソッドthis.options.sliderを持たない要素であると思います。sliderDownHandler保護されたメソッドで発生する例外は非常にユニークであり、間違いではありません-外部で呼び出して試してくださいinstance.sliderDownHandler()

次のいずれかとして書き直します。

var self = this;
...
mousedown:function (e){
    self.sliderDownHandler();
}

// or, bind the event to the class instance method...
mousedown: this.sliderDownloadHandler.bind(this)
于 2012-08-21T15:08:13.803 に答える