0

こんにちは私は道場を学び始めたばかりですが、どうすればthisオブジェクトを使用できますか?私は以下のようなものを作成しましたが、それは正しくありません

var node = dojo.query('.verticalslider')[0];
dojo.connect(node, "onclick", function(){
    var c = dojo.query(this).parent();
    console.log(c);
})
4

2 に答える 2

1

修正されたコード:

// 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ドキュメントを参照してください

于 2012-05-15T17:36:29.320 に答える
0

上記のコードは簡単な方法ですが、関数/コールバック内でこのコンテキストが必要な場合は、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);
}))
于 2015-01-12T17:40:19.327 に答える