2011-09-20 43 views
0

我有困難包裝我的頭編碼dojo風格。我被它吸引的原因是因爲它的類風格編碼。我已經完成了AS開發和一些Java,所以對我來說它是有意義的。我做了一些jquery風格的DOM工作,但我需要爲我開始的項目提供更多基於框架的設置。 我的問題是我應該創建一切與聲明的類,然後在需要時要求他們。或者,我可以像常規JavaScript模塊一樣使用名稱空間編寫閉包類型函數。我很困惑。道場風格發展

示例我想要一組負責管理數據的方法。然後我想擁有處理特殊ajax調用的另一個方法集合。我是否會在單獨的js文件中爲這些方法組中的每個方法聲明一個類?然後在我的app.js中,這是我處理所有類的初始化的應用程序類,我是否會在dojo.ready(){} 之前需要這兩個類,然後一旦調用ready方法,我可以開始使用這些類。

有人可以在我出去玩之前讓我直接來到這裏。 是否需要爲該js文件提出加載請求,如果是這樣,您總是必須使用ready方法。如果是這樣,最好在應用程序初始化開始時預先要求一堆類。

+0

沒有道場的人,任何人都可以回答這些問題的一些? – Chapsterj

+0

哎呀,一個小時(編輯:對不起,3個小時;仍然適用)不等待一個答案;)我現在寫一個。 –

+0

嘿肯對不起,聽起來很挑剔,但我有點沮喪,閱讀了幾小時和幾小時的相同文檔,沒有完全解釋我的問題,或者他們這樣做,我沒有得到它。我甚至一直在試圖找到Util類的例子,你不必實例化它們。好像它要麼聲明它,並用新的myClass調用它,有時我只是想創建一個我可以公開調用的util或helper類。如果您有時間回答上面的一些問題,那就太好了。再次抱歉,如果我遇到不耐煩。 – Chapsterj

回答

2

從技術上說,對於你想要做的事情,你可以採取任何方式 - 使用dojo.declare或簡單地創建一個包含函數成員的對象。我傾向於做後者,因爲dojo.declare的精心設計的繼承考慮總是過度使用,在這種情況下你將不會使用它,並且當你只想要實例化任何東西時通常沒有任何意義將一些實用方法組合在一起。

對於簡單的工具組一起的方法,我傾向於做的東西沿着這些路線模塊:

dojo.provide('my.utils'); 

my.utils = { 
    doSomething: function(){ 
     /* do something... */ 
    }, 

    doSomethingElse: function(){ 
     /* do something else... */ 
    } 
}; 

RE裝載,如果我讀你的權利,那麼,你有權利理念。在你的網頁中,你需要的模塊是dojo.require(...)(也許只有一個,如果你有其他需要的其他依賴關係)。然後,期望這些模塊加載的頁面中的任何代碼都應該在傳遞給dojo.ready的函數中。這確保即使在模塊異步加載的情況下(即使用跨域加載器),您的代碼仍然可以工作。 dojo.ready明確地等待(1)DOM準備就緒,並且(2)所有dojo.required模塊直到要加載的點。

請注意,在模塊本身內部,爲了等待dojo.require d模塊的加載,您不需要附上代碼dojo.ready;這是由加載程序自動計算出來的。 (但是,如果模塊中的某些邏輯需要等待DOM準備就緒,那麼您仍然會依賴於dojo.ready。)

我已經在過去寫過更多關於dojo.ready的內容;也許這將是一個有益的閱讀:http://kennethfranqueiro.com/2010/08/dojo-required-reading/

+0

謝謝你的詳細信息。如果您不需要聲明的額外功能,那麼這種典型風格也是如此。你還可以使用閉包函數和其他javascript模式,並將它們分配到命名空間中,並且仍然使用require()方法加載它們。只是想確保在不好的練習時我不會開始寫出各種各樣的模式。很多時候我不需要多次使用這個對象,所以不需要實例化它。 – Chapsterj

+0

你可以在表單中指定任何你想要的「my.utils」,它會沒事的。是的,將模塊的主體放在立即調用的函數表達式中以創建閉包供您使用並不罕見。 –

+0

非常感謝您爲我清理。 – Chapsterj