2016-03-31 15 views
0

イベントの追加と削除を行う小さなライブラリを作成しています。私は単純にメソッドのパラメータをjQuery onに渡そうとしています。 これを行うことができない理由はありますか?jQueryをonから呼び出してください

# within some object 
... 
on: (el, args...) -> 
$(el).on.apply(this, args) 

私はthisを使用しています方法が正しくないかもしれませんが、私はそれが問題であるとは思いません。そして、そのように呼ばれることになる

は:

SomeObj.on('#hi', 'click' 
    -> console.log('clicked element') 
) 

私は、これは完全に私に遊説され、いくつかの理由でエラーUncaught TypeError: elem.each is not a function

を取得します。

+2

あなたは間違った「this」を持っています。あなたは '$(el)'が必要です – Amit

+0

@Amitああ、うまくいきました! – Johnston

+0

@Amitなぜ正確に? – Johnston

答えて

1

問題です。あなたの前提にかかわらず、thisの間違った使用です。

問題は、メンバー関数(「メソッド」)を呼び出すと、通常、あるオブジェクト(「コンテキスト」)で動作することです。 applycallまたはbindを介して関数を呼び出すと、関数のプロパティ(この場合はapply)にアクセスすると失われるため、コンテキストは自動的に渡されません。これを克服するには、関連するthis属性を設定する必要があります。あなたの場合、これは$(el)オブジェクトをapply()関数に渡すことを意味します。

関連する問題