将DOM交互放在可扩展的javascript架构上的位置

Dom*_*rre 5 javascript architecture

关于如何拥有更易维护的javascript架构,我现在有点困惑.我可能不在轨道上,但我会说我的代码中有近50%涉及DOM因此使用我的基础库(jQuery).

我已经检查了[1] Nicholas Zakas的可扩展应用程序架构设计:http://developer.yahoo.com/yui/theater/video.php? v = zakas -architecture 和[2] Addy Osmani模式用于大规模JavaScript应用程序架构http://addyosmani.com/largescalejavascript/.

我有一个单页应用程序样式,通过ajax获取大量内容,动态添加DOM元素.我的主要问题是:如果我使用jQuery(或任何其他基础库)来操作DOM,我如何将代码分成小的可重用块.

让我们选择一个任务列表模块.我知道该模块可能如下所示:

var TaskList = function() {
  addTask = function() {
    ...
  };

  removeTask = function() {
    ...
  };

  return {
    addTask: addTask,
    removeTask: removeTask
  }
}();
Run Code Online (Sandbox Code Playgroud)

应该在哪里编写DOM元素事件注册,ajax调用以保存,加载或删除任务,将新任务附加到DOM元素等.

我承诺在模块上使用jQuery作为依赖项没有问题,但如果有更好的方法,我认为我从上面的两个资源中错过了它,我很想知道它.

我只是希望有一种更优雅的方式来维护不断增长的javascript,因为我厌倦了意大利面;)

谢谢你的时间!

小智 0

由于您将开发一个单页应用程序,因此您将拥有许多可视模块,这些模块将在当前步骤中显示,然后它们将被其他模块替换。

您可以遵循 MVC 模式(模型-控制器-视图),每个可视元素都是一个单独的实体,具有自己的 DOM 操作代码和存储在单独的类中的业务逻辑。

一种方法是:

<html>
  <head>
   ....
  </head>
  <body>
    <div id="content"> 
    <!--The main container view that can handle the replacement of smaller views -->
      <div id="toolbar"_container">
        <!-- container for menu bar or tool bar that can also has its contained 
             sub-views replaced -->
      </div>
      <div id="main_content_container">
        ....
      </div>
      <div id="properties_panel">
       .....
      </div>
    </div>      
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

主容器可以容纳所有较小的容器,每个容器都容纳具有自己的 DOM 操作代码的不同视图控制器(这还有一个好处是能够按需动态加载,从而减少初始化加载时间)。

每个视图都可以有几个模块来执行“操作”,并与第三个模块(可选)通信,第三个模块将处理数据库、套接字、文件等的 I/O。

希望有帮助!