2012-04-05 118 views
1

我是Dojo的新手,並試圖理解如何處理事件。似乎至少有3或4種不同的方式將事件綁定到元素。爲了增加混淆,一些方法似乎已經被新的v1.7所棄用,所以即使將我的網頁搜索限制到最近幾個月也沒有幫助。關於Dojo事件的教程

只要有這個例子的工作將是一個良好的開端(有一件事我還沒有想通了,是哪些模塊應加載什麼):

http://jsfiddle.net/sVJWY/

但除此之外,我希望能找到一個很好的參考。

回答

3

這是一個簡化的工作示例。

// alert url when hover over link 
require(["dojo/query", "dojo/on", "dojo/domReady!"], function(query, on) { 
    query("a").on("mouseover", function(evt) { 
     alert(evt.target.href); 
    }); 
}); 

http://jsfiddle.net/RichAyotte/sVJWY/6/

這裏有一個foreach的例子。

require([ 
    "dojo/query" 
    , "dojo/on" 
    , "dojo/domReady!"], function(query, on) { 
    query("a").forEach(function(node) { 
     on(node, "mouseover", function(event) { 
      alert(node.href); 
     }); 
    }); 
}); 

http://jsfiddle.net/RichAyotte/sVJWY/7/

注意的onmouseover - >鼠標懸停在代碼或者你可以使用鼠標的擴展。

require(["dojo/on", "dojo/mouse"], function(on, mouse){ 
    on(node, mouse.enter, hoverHandler); 
}); 

http://livedocs.dojotoolkit.org/dojo/on

+0

道場風格謝謝!任何想法如何讓我的例子工作?我需要forEach,因爲在實踐中,我對每個節點都有不止一個動作。 – Christophe 2012-04-05 23:04:45

+0

我已經失去了你的最後一個例子... require和define有什麼區別? – Christophe 2012-04-06 16:22:26

+0

define和require之間的區別在於,define有望返回一個值。最後一個例子只是指出鼠標擴展的一個好處。它是從文檔複製的,它看起來不對,因爲它沒有返回任何內容,所以我會將其更改爲require。這裏有關於裝載機的更多信息。 http://livedocs.dojotoolkit.org/loader/amd – 2012-04-06 18:16:38

2

爲了您的例子,這是在道場風格的正確的JavaScript

require(["dojo/dom", "dojo/parser", "dojo/domReady!","dojo/on","dojo/query"], 
    function(dom,parser,domReady,on,query){ 
     dojo.ready(function(){ 
      query("a").forEach(function(node){ 
       on(node,"mouseover", function(event){alert(node.href);}); 
      }); 
     });    
    });​ 

你是色澱道場查詢模塊,併爲新的AMD系統

+0

好點。我已經清理了我的答案是純粹的AMD。你的答案遭受同樣的問題。 dojo.ready例如不是AMD,在這種情況下不需要,因爲你已經包含了domReady!模塊。 – 2012-04-06 03:29:38

+0

感謝您的示例! – Christophe 2012-04-06 19:32:18