jQueryで.delegate()
を使用しているハンドラコールバックに問題があります。この設定では、$ Bが作成された場所にある2つのファイルと、単純な$(doc).readyファイルが使用されます。jQuery代理コールバック
<g>
の束(50+)を持つSVGファイルがあります。<g>
ノードに機能を追加する代わりに、デリゲートはクリーンなオプションのように見えます。
しかし、私はJavaScriptに関する知識が相対的に不足していると考えています。正常に動作します
$C.Events.onStation({
click : function(e){
console.log(e)
return false;
},
mouseenter : function(e){
return false;
},
mouseleave : function(e){
return false;
}
})
:
はここに私のメインの準備()ファイルのセットアップです。すべてのは、私の$ B.Eventsは、オブジェクトの内部など、通過:
Events : new function(){
var _station = function(obj){
// delegate the events to the primary SVG node
for(var type in obj){
$(City.Map.node).delegate('g', type, function(){
obj[type]()
})
}
return {
onStation : _station
}
// others taken out for relevance
}()
さて、これで、私は別の関数でラップするのではなく、obj[type]
に渡した場合、それが正常に動作します。それだけで問題が起こるのは、渡された関数(つまりイベントデータオブジェクトを使いこなす)でいくつかの事前作業を行うだけでなく、すべてのreturn false
を委任コードに移動して、他のファイルを掘り起こす必要がないことです。
jQueryの.delegate()
関数でコールバックハンドラ関数内で実行される最初のコードブロックから関数を取得するにはどうすればよいですか?
編集レスポンス
で、私はそれが正しい方向への一歩だと思います。私はそれがJSの性質に起因するものであり、必ずしもロジックではないと感じていました。だから私は時々Javascriptが嫌いです。
このソリューションの問題は、プリミティブをジェネリックビルダー関数に渡すことです。実行可能な関数を格納して返す必要があります。私が試みたいくつかのことは成功しなかった。
var _station = function(events){
var _funcs = {}
var _selection = null;
var create = function(f){
return function(){ return f() }
}
for(var t in events){
_funcs[t] = create(t, events[t])
}
console.log(_funcs)
// delegate the events to the primary SVG node
for(var type in events){
$('#stations', Bart.Map.node).delegate('g', type, function(e){
_funcs[type](e)
e.stopPropagation()
})
}
}
を、私はそれが機能として戻ってくるが、私は私の人生のためにそれを実行することはできませんlog(_funcs[type])
時:ここに私が試した多くの例があります。
この閉鎖物は私を殺します。
私は確信していませんが、私はあなたの問題は、ループでクロージャを作成していると仮定しています。 [この質問]を見てください(http:// stackoverflow。com/questions/750486/javascript-closure-inside-loops-simple-practical-example)、この問題が修正されたかどうかをお知らせください。 –
はい、私はそれが何かとは思っていますが、自分の用途に合ったコードを手に入れることはできません。元の投稿を反映するように更新しました。感謝フェリックス、将来の使用のためにそれをブックマークするつもり。 – Phix