![](/img/trans.png)
[英]Issues resizing a dojo datagrid on using dojo titlepane within a dojo grid?
[英]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.