こんにちは私は道場を学び始めたばかりですが、どうすればthis
オブジェクトを使用できますか?私は以下のようなものを作成しましたが、それは正しくありません
var node = dojo.query('.verticalslider')[0];
dojo.connect(node, "onclick", function(){
var c = dojo.query(this).parent();
console.log(c);
})
こんにちは私は道場を学び始めたばかりですが、どうすればthis
オブジェクトを使用できますか?私は以下のようなものを作成しましたが、それは正しくありません
var node = dojo.query('.verticalslider')[0];
dojo.connect(node, "onclick", function(){
var c = dojo.query(this).parent();
console.log(c);
})
修正されたコード:
// eventlistener is setup on every DOM node with className 'verticalslider'
dojo.query('.verticalslider').connect("click", function(){
// this references the clicked DOM node
var c = this.parentNode
// parentNode of the clicked DOM node with class 'vertical..'
console.log(c);
})
これは一般的なjsの質問であり、道場ですが、.connect関数と.on関数には次のように適用されます。
dojo.connectは、eventlistenerを作成するためのラッパーです。通常、node.foo = function(){}のようなコードを作成する場合、等号が既存の関数をオーバーライドするため、1つの関数しか使用できません。.connectの標準的な動作では、同じスコープが適用されるため、「this」はリッスンしているオブジェクトを参照しています。この場合、「ノード」。
dj.connect(node, "foo", function() { this == node evaluates to true and arguments[0] == event });
dojo.hitch(dojo / _base / lang)は、スコープ接続ヘルパーです。これは、タイムアウト/間隔フック以外のすべてのイベントで機能し、.connectなどに渡された関数オブジェクトを、dojo.hitch(scope、functor)などの指定されたスコープで実行するように強制します。
dj.connect(node, "bar", dj.hitch(dojo.doc(), function() { this == window.document evals true }));
dojo.queryに関する限り、NodeListが返されます。リストに単一の親を含めることはできないため、dojo.query(node).parent()は間違っています。.queryの正しい使用法は、セレクターを最初の使用法として渡すことです。そのようです:
dj.query(
/* String */ "CSS Selector",
/* Optional DOM node, defaults to body */ contextNode
) // => dojo.NodeList
NodeListドキュメントを参照してください
上記のコードは簡単な方法ですが、関数/コールバック内でこのコンテキストが必要な場合は、dojo.hitch(<1.7)またはlang.hitch(1.7+)を使用してください。これのコンテキストを関数内に渡します。
例:
var myObj = {
foo: "bar"
};
var func = dojo.hitch(myObj, function(){
console.log(this.foo);
});
ここで、関数内のこれは、オブジェクトmyObjのコンテキストを参照します。
別の固定コードは次のとおりです。
var node = dojo.query('.verticalslider')[0];
dojo.connect(node, "onclick", dojo.hitch(this,function(){
var c = dojo.query(this).parent(); // here this will be having the outside context .
console.log(c);
}))