2012-05-15 21 views
0

你好我剛剛開始學習道場,我該如何使用this對象?我創建了類似下面,但我的東西它不是正確的道場使用這個

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

爲什麼你認爲這是不正確的? – hugomg

回答

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和。適用於以下功能:

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 

看到NodeList docs

+0

謝謝mate !!!! :) – Krystian

0

提到上面的代碼是一條筆直的路通過,但如果你需要的任何功能/回調裏面這樣的背景下,使用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); 
}))