jqmウィジェットに問題があります。私がそれをするとき$("div[id=leftSideList]").leftlist('refresh')
、それはうまくいきます。しかし、私がこのような解釈で以下のコードをラップすると
function _list (key) {
switch (key) {
case 'leftlist':
return $("div[id=leftSideList]").leftlist;
case 'rightlist':
return $("div[id=leftSideList]").rightlist;
}
}
を使用しますit _list('leftlist')('refresh')
。そのリターンミーエラーUncaughtTypeError:this.eachは関数ではありません
問題は、返された関数(leftlist
またはrightlist
)がスコープを失ったためです。this
関数内でdiv[id="leftSideList"]
要素を参照しなくなったため、エラーが発生しました。
を使用してこれを修正できますが$.proxy
、これは非常に醜く、実稼働環境で実際に実行可能なソリューションではありません。
function _list(key) {
switch (key) {
case 'leftlist':
return $.proxy($("div[id=leftSideList]").leftlist, $("div[id=leftSideList]"));
case 'rightlist':
return $.proxy($("div[id=leftSideList]").rightlist, $("div[id=leftSideList]"));
}
}
実例-leftlist()
とのソースを指定しなかったため、これは組み込みのjQueryメソッドを使用していることに注意してくださいrightlist()
。
はるかに優れた解決策は、この完全に不要な抽象化を完全に回避することです。選択した要素の一貫性を維持する以外に、何のメリットもありません。
function _list(key, action) {
return $("div[id=leftSideList]")[key](action);
}
_list('leftlist', 'refresh')
最後に、使用div[id=leftSideList]
は冗長で時間がかかることに注意してください。#leftSideList
代わりに使用できます。属性セレクターを使用する唯一の理由は、同じid
属性を持つ複数の要素がある場合です。これは無効であり、できるだけ早く修正する必要がある問題です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加