我有一個heckuva時間過渡到Dojo和新的AMD結構,我真的希望有人能夠闡明整個概念。過去幾周,我一直住在Google上,試圖找到關於使用情況的信息,但是結構和設計模式在使用這個方面的趨勢。Dojo require()和AMD(1.7)
我覺得奇怪的是一個相對複雜的JavaScript應用,如用於主頁面的dijits需要創建和樣式,DOM元素創建,等等,我需要需要,因此使用,一噸AMD系統之前在dojo名稱空間中可用的不同模塊(或至少未分配到23個不同的變量)。
例子:
require(['dijit/form/ValidationTextBox', 'dijit/form/SimpleTextarea', 'dijit/form/CheckBox', 'dijit/Dialog', 'dijit/form/Form'])
require(['dojo/ready', 'dojo/parser', 'dojo/dom-style', 'dijit/registry', 'dojo/dom', 'dojo/_base/connect', 'dojo/dom-construct'],
function(ready, parser, style, registry, dom, event, construct){
//...etc
}
這只是少數爲我工作在頁面上的一個模塊。當然,有一種更好的,非破壞性的未來發布方式來訪問這些方法等等。我的意思是,我真的必須導入一個全新的模塊才能使用byId()
嗎?還有另一個連接事件?最重要的是,通過在函數參數列表中分配一個變量名稱來創建所有的混亂,似乎就像這樣的後退步驟。
我想,也許在需要的時候,比如query
模塊你只會require()
模塊,但如果我需要一次以上,那麼很有可能會被分配給超出範圍的變量,我需要把它放在domReady!
或ready
呼叫。 重新.... ....!
這就是爲什麼我只能認爲這是我對道場的理解不夠。
我確實已經看過並搜索過併購買過書籍(雖然是AMD之前的版本),但是這個庫確實讓我有錢跑了。我欣賞任何人都可以擺脫這一點。例
require(['dijit/form/ValidationTextBox'])
require(['dojo/ready', 'dojo/parser', 'dojo/dom-style', 'dijit/registry', 'dojo/dom', 'dojo/_base/connect', 'dojo/dom-construct'], function(ready, parser, style, registry, dom, event, construct){
/* perform some tasks */
var _name = new dijit.form.ValidationTextBox({
propercase : true,
tooltipPosition : ['above', 'after']
}, 'name')
/*
Let's say I want to use the query module in some places, i.e. here.
*/
require(['dojo/query', 'dojo/dom-attr'], function(query, attr){
query('#list li').forEach(function(li){
// do something with these
})
})
}
編輯基於關閉此格式,用於與許多例子都來自Dojo工具包鄉親以及第三方網站,這將是,恕我直言,絕對荒謬的加載所有需要的模塊作爲第一function(ready, parser, style, registy...
將越來越長,並與命名衝突產生問題等
燒起來require()
荷蘭國際集團腳本的生活中,我需要的所有模塊似乎只是傻傻的我。話雖如此,我不得不看看一些「包管理器」腳本。但是對於這個例子,如果我想在選擇的地方使用查詢模塊,那麼我將不得不將其加載到主要的require()
語句中。我理解爲什麼在某種程度上,但通用的dot-syntax命名空間有什麼不好? dojo.whatever? dijit.findIt()?爲什麼加載模塊,引用一個獨特的名稱,通過關閉,等等等等?
我希望這是一個更容易問的問題,但我希望這是有道理的。
惱怒
叫我對於新手,但是這是真的..真的..快把我逼瘋了。談到Javascript(顯然不是),我不是noob,而是哇。我不知道這個了!
這裏是我收集。在adder.js:
define('adder', function(require, exports){
exports.addTen = function(x){
return x + 10
}
})
在某些母版頁或什麼:
require(['./js/cg/adder.js'])
...不遵循整齊require(['cg/adder'])
格式,但不管。現在不重要。
然後,使用adder
應該是:
console.log(adder.addTen(100)) // 110
我得到的最接近是console.log(adder)
返回3
。是的。 3
。否則,它是adder is not defined
。
爲什麼這必須是那麼難嗎?我使用這個我的小白卡,因爲我真的不知道這是爲什麼不走到一起。
謝謝你們。
你應該問你後續的新問題。您沒有足夠的代碼來向我們展示問題(例如,您甚至沒有定義「加法器」)。 – Domenic 2012-02-08 13:06:57
根據您的樣品上,你只需要兩個模塊的依賴關係,框dijit /表格/ ValidationTextBox和道場/查詢,在一個需要聲明。傳遞依賴關係爲您照顧。就像@Domenic說的,也許這裏有更多,我們應該重新開始。 – peller 2012-02-08 16:27:13
我不是?嗯,我會重新開始。多謝你們。歡呼 – Phix 2012-02-08 18:41:20