2013-10-25 16 views
0

這實際上是我在Stack中的第一個問題(長時間監聽器和所有這些)。除非它在全局範圍內,否則不能使用dojo/query

我對Javascript一般而言並不陌生,當然對於Dojo來說也是新手。在這個問題上我一直在絞盡腦汁,但看不到我做錯了什麼。

我試圖通過此代碼獲取查詢以返回DOM中的所有<p>標記。一切都很好。

define ([ 
"dojo/dom", 
"dojo/query" 
], function (dom) { 
return { 
    changeParagraphs: function() { 
     var nodeList = dom.query('p'); 
     console.log(nodeList); 
    } 
    } 
}); 

打擾佈局,還是習慣了這個。 如果我打電話詢問,因爲我在這裏...

require(["custom/q3", 
     "dojo/domReady!", 
     "dojo/query"], function(myObject){ 
    myObject.changeParagraphs(); 
}) 

我得到一個對象有沒有方法查詢錯誤。

如果不是

VAR節點列表= dom.query( 'P')

我打電話......

VAR節點列表= dojo.query(「P ')

一切都很好。爲什麼?我知道它不好的做法是使用全球(真的是任何語言),但是我做錯了什麼?我無意使用全球!

我想我最有可能浪費人們在這裏的時間,但我一直在頭撞着鍵盤幾個小時。這很可能是非常明顯的事情!

在此先感謝!

回答

2

錯誤object has no method query是有關該問題的提示。 dojo/dom模塊沒有查詢方法。相反,你需要公開的dojo/query方法在定義回調函數:

define(["dojo/dom", "dojo/query"], function (dom, query) { 
    return { 
     changeParagraphs: function() { 
      var nodeList = query('p'); 
      console.log(nodeList); 
     } 
    } 
}); 

然後在您需要:

require(["custom/q3", "dojo/domReady!"], function (myObject) { 
    myObject.changeParagraphs(); 
}) 
+0

非常感謝的快速反應。今晚晚些時候我會看這個,所以我會回覆你。我相信你的回答很可能是正確的:) 所以當我試圖使用它時,它被連接到我的對象,我_應該_直接訪問它? – Galatoni

+0

剛剛檢查過它,它工作得很好(就像我懷疑它!) 非常感謝。需要退後一步。歡呼再次尋求幫助! – Galatoni

+1

@Galatoni幾乎每個Dojo 1.9模塊(例如'foo/bar/baz')的設計都是爲了在使用時創建單個對象,數組或數字等,所有這些都希望沒有任何副作用或全局變量。當模塊加載器完成所有這些有效載荷時,它將按照列出模塊名稱的相同順序將它們傳遞給您的函數。所以在BuffaloBuffalo的例子中,如果你真的想,你可以*重寫它爲'function(foo,bar)'和'bar('p')'。 (這只是不好的風格。) – Darien

相關問題