簡體   English   中英

道場使用這個

[英]dojo using this

你好,我剛剛開始學習道場,我this如何使用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問題,然后是一個dojo,但對於.connect和.on函數,以下適用:

dojo.connect是用於創建事件監聽器的包裝器。 通常,如果您編寫諸如node.foo = function(){}之類的代碼,則只能使用一個函數,因為等號會覆蓋現有函數。 .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);
}))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM