你好我剛剛開始學習道場,我該如何使用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和。適用於以下功能:
dojo.connect是用於創建eventlistener的包裝。通常,如果您編寫像node.foo = function(){}這樣的代碼,則只能有一個函數,因爲等號會覆蓋現有函數。 .connect的標準行爲是應用相同的範圍,所以'this'引用了我們正在監聽的對象。在這種情況下'節點'。
dj.connect(node, "foo", function() { this == node evaluates to true and arguments[0] == event });
dojo.hitch(道場/ _base /郎)是一個範圍附着幫手。它適用於任何事件,但超時/間隔鉤子,並會強制傳遞給函數對象,如.connect,在給定範圍內運行,如dojo.hitch(scope,functor)。
dj.connect(node, "bar", dj.hitch(dojo.doc(), function() { this == window.document evals true }));
至於dojo.query推移,它會回報你一個節點列表。列表不能有單個父項,所以你的dojo.query(node).parent()是錯誤的。 .query的正確使用是在第一次使用它時傳遞一個選擇器。像這樣:
dj.query(
/* String */ "CSS Selector",
/* Optional DOM node, defaults to body */ contextNode
) // => dojo.NodeList
謝謝mate !!!! :) – Krystian
提到上面的代碼是一條筆直的路通過,但如果你需要的任何功能/回調裏面這樣的背景下,使用dojo.hitch(< 1.7)或郎.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);
}))
爲什麼你認爲這是不正確的? – hugomg