我確實是dojo的新手,但是當我開始使用dojo版本1.7.2開發新應用程序時,我也想使用新的AMD語法來實現功能。不幸的是我似乎沒有得到它。 :-(Dojo AMD:無法在需求中調用函數
什麼最苦惱的是,我不能簡單地調用任何函數,它是一個「規定」 - 塊內。 比如我有一個關於開放與幾個小部件創建一個動態表頁面。每一行 然後,我有一個按鈕,添加一個空行每次按
沒有AMD語法會很容易:
- 把我的「dojo.require()」中的HEAD
- 和然後創建一堆我自己的函數來創建表格和小部件
- 添加行函數可以很容易地訪問我以前的func中的任何全局變量重刑充滿
但隨着AMD公司這樣的:
初始函數創建表和窗口小部件:
function fillReportTable(repId) {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
function createNewRow(tbl) { ...}
function function1() {... }
function function2() {... }
function function3() {... }
}
現在的「添加空行」按鍵,就其自身的功能「addEmptyRow」。
但是在這個函數中,我必須:
- 對每個dojo模塊再次做其他要求
- 我不能使用「fillReportTable」函數中的「內部」的任何函數。例如「createNewRow」功能
function addEmptyRow() {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
}
這一切似乎都與AMD非常複雜。
或者我錯過了明顯的東西在這裏?
對於AMD來說,如果你將代碼分成許多小功能,你是否會重複執行EACH函數中的「require」?或者你把所有的功能都放在一個「需求」裏面的完整列表中?
如果你這樣做了第二種方式,你如何從小部件事件調用這些函數?
所以,'fillReportTable:在返回的對象fillReportTable'會暴露'fillReportTable()'函數? – joakimdahlstrom 2012-03-09 15:32:34
是的,沒錯。當* mymodule *模塊爲'require'd時,AMD加載器將加載該模塊的特定JS文件(在我們的例子中爲'mymodules/mymodule.js'。在該JS文件中,您將函數傳遞給'define',並且這個函數用來'導出'模塊的功能,在你的情況下,模塊表示一個有兩個輔助函數的對象 – 2012-03-09 16:28:10
所以現在我可以在require之外的任何地方調用mymodule.fillReportTable()? – Andy 2012-04-05 20:02:49