2010-12-13 89 views
4

Iam試圖在JavaScript編碼中變得更好。遠離1000行代碼在一個文件中。但IAM不知道這是 「正確」 的方式:JavaScript的結構,正確的方式?

RequireJS需要 「boot.js」 內部時加載文件:

require([ 
    "library/jquery.form/jquery.form", 
    "app/eventManager", 
    "app/myapp" 
], function() { 
    $(function() { 
     MyApp.init(); 
    }); 
}); 

MyApp.js

var MyApp = { 
init: function() { 
    MyApp.mainController(); 
}, 

// this is our controller, only load stuff needed.. 
mainController: function() { 

    //controller = set from php/zendframework 
    switch (controller) { 
     case 'admin': 
      MyApp.initAdmin(); 
      break; 
     default: 
      break; 
    } 
}, 

// action for admin controller 
initAdmin: function() { 
    //lazy load 
    require(["app/admin/admin"], function(){ 
     MyApp.admin.init(); 
    }); 
}}; 

MyApp.admin .js

MyApp.admin = { 
init : function() { 
    if (permisson != 'admin') { 
     console.log('Permission denied.'); 
     return false; 
    } 
    MyApp.admin.dashboard.init(); 
} 

};

MyApp.admin.dashboard = { 

init: function() { 
    MyApp.admin.dashboard.connectEventHandlers(); 
    MyApp.admin.dashboard.connectEvents(); 
    MyApp.admin.dashboard.getUserList('#admin-user-list'); 
}, 

connectEvents: function() { 
    EventManager.subscribe("doClearCache", function() { 
     MyApp.admin.dashboard.doClearCache(url); 
    }); 

    EventManager.subscribe("doDeleteUser", function() { 
     MyApp.admin.dashboard.doDeleteUser(url); 
    }); 

}, 

其他「風格」是常見的嗎?或者這是一個很好的結構代碼?網絡中有很多例子,但我無法找到「真實生活」的代碼。

當我需要「.prototype」時,最大的「問題」之一?

回答

2

我對你的代碼做的一個改變是避免在所有地方重複'event'字符串。 你可以通過做這樣的事情減少這種:

var app = { 

     events : { 

     someEvent : "someEvent" 

     } 

} 

EventManager.subscribe(app.events.someEvent, someFn); 

EventManager.publish(app.events.someEvent); 

我也將避免直接調用的console.log和使用的包裝,如this提供一個備用的,如果沒有控制檯可

N.乙安格斯·克羅爾有一個體面的blog,他提到的js結構/命名空間等

且有一定的距離深諳JS忍者

4

JavaScript Patterns對構造代碼的各種方式是一個很好的參考。

研究諸如jQuery之類的庫的源代碼也是一個好主意。

+0

+1有用的鏈接:) – Sarfraz 2010-12-13 17:58:17

+0

好書非常感謝提示,訂購;-) – opHASnoNAME 2010-12-14 05:06:14

1

對於與JavaScript最佳實踐有關的所有問題,我都請Douglass Crockford處理。

這是他的主頁:http://javascript.crockford.com/

這是一本關於在JavaScript中做什麼和不做什麼的好書。 http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb

這是他的驚人工具,可以自動告訴你,如果你正在使用任何最差的做法。 http://www.jslint.com/

至於原型問題,當您想要使用原型繼承時使用原型,或創建一個「靜態」類函數,該函數將針對該類的所有實例呈現,而不會消耗每個實例的內存。

1

Require.js是很棒的工具,你也可以在客戶端使用它。但在移動設備上使用時要小心。在這種情況下,您應該使用編輯器在一個文件中更好地導航或使用諸如sprocket之類的東西。這是一個「預編譯器」,不會將任何其他庫添加到您的代碼中。

我通過你的分片代碼。可能您應該將不同的部件定義爲模塊,請閱讀requirejs documentation for defining modules,它會提供很好的幫助。

但請三思而後行,是否真的需要爲您的代碼組織一個額外的庫。

1

如果你正在構建更復雜的東西被分享了在JsMentors真的好知識,爲包含多個產品模塊和子模塊的示例,我建議爲您的模塊創建一個上下文層次結構。還要讓UI組件自成一體,以便在一個地方爲特定的UI組件提供模板,CSS,邏輯,資產,本地化等。

enter image description here

如果您需要參考一個參考架構進行大規模的js發展看http://boilerplatejs.org。我是它的主要作者,它展示了許多在複雜產品開發中很有用的模式。