1

以下の例では、jqueryイベントからmyfunctionを呼び出そうとしています。これは正しくないです。イベントは発生しますが、イベントからこの関数を呼び出す方法がわかりません。アイデア?

registerSliderControlEvents: function(){
    $("#slider-fill").on('slidestop', function (event) {
            //...some code

            this.myfunction(size);
        }
},

myfunction: function(size){
      //....some code
}
4

2 に答える 2

4

閉鎖期間中のため、範囲thisが変更されました。this事前に変数に格納するのが一般的な方法です。似たようなもの:

registerSliderControlEvents: function(){
    var self = this;
    $("#slider-fill").on('slidestop', function (event) {
            //...some code

            self.myfunction(size);
        }
}
于 2013-02-28T17:01:32.720 に答える
1

イベントハッシュを使用してBackbone.View、スコープの問題を回避できます(ここのドキュメントを参照)。次のようなもの:

events: {
    'slidestop #slider-fill': 'handleSlideStop' 
},

handleSlideStop: function() {
      // Not sure where size param is coming from, but assuming
      // you can set it as a property of the view somewhere.
      console.log('Size', this.size);
}

もう1つの方法は、アンダースコアのbindメソッドを使用することです。これにより、ビュー内の名前付き関数にコールバックを委任し、呼び出されるスコープを指定できます。これは次のようになります。

registerSliderControlEvents: function(){
    $("#slider-fill").on('slidestop', _.bind(this.myFunction, this));
},

myfunction: function(size){
      //....some code
}

thatスコープの問題に頼ったり解決したりする必要があるときは、いつも少し汚れていると感じself、可能であればそれを避けようとします。しかし、私はJavaScriptにかなり慣れていないので、おそらくJavaScriptを必要な悪として受け入れる必要があります;)

于 2013-02-28T17:25:14.837 に答える