javascript - 模块粒度策略

标签 javascript knockout.js requirejs

我正在构建一个 KnockoutJS 网络应用程序,使用 RequireJS 对其进行模块化。我正在尝试在两种将事物分解为模块的策略之间做出决定。

平面方法:
一种方法具有更扁平的目录结构和更大的模块:

/webapp
 |-/scripts
    |-/templates
    |  |-car_edit.html
    |  |-car-view.html
    |  |-person_edit.html
    |  |-person_view.html
    |-main.js
    |-person.js
    |-car.js

例如,person 模块(在 person.js 中)是这样实现的:

define(['jquery', 'knockout', ...], function($, ko, ...) {

  var PersonViewModel = function PersonViewModel() { ... };

  var load = function load(id) { ... };

  var create = function create() { ... };

  var view = function view(element, model) { ... };

  var edit = function edit(element, model) { ... };

  return {
    Model : PersonViewModel, // exposes ViewModel for testing
    create : create,         // reserve id on server, return new empty Person
    load : load,             // get data from server, return new Person w/ data
    view : view,             // load view template, bind Person
    edit : edit              // load edit template, bind Person
  };
});

深层结构方法:
另一种方法是使用更深的目录结构和更小的模块:

/webapp
 |-/scripts
    |-/car
    |  |-/templates
    |  |  |-edit.html
    |  |  |-view.html
    |  |- Model.js
    |  |- view.js
    |  |- edit.js
    |  |- create.js
    |  |- load.js
    |-/person
    |  |-/templates
    |  |  |-edit.html
    |  |  |-view.html
    |  |- Model.js
    |  |- view.js
    |  |- edit.js
    |  |- create.js
    |  |- load.js
    |-main.js

代码与之前的示例类似,除了模块的每个部分现在是它自己的模块:

//  /person/Model.js
define(['jquery', 'knockout', ...], function($, ko, ...) {

  return function Model() { ... };

});


//  /person/view.js:
define(['jquery', 'knockout', ...], function($, ko, ...) {

  return function view(element, model) { ... };

});

等等。

哪种方法是首选?我是否缺少更好的方法?

最佳答案

对于 Backbone/Require,我们使用 this Boilerplate ,我认为你可以将它与另一个框架一起使用,只需稍作调整。

非常完整,即使是第一次找代码也很容易找到模块。

关于javascript - 模块粒度策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324123/

相关文章:

javascript - 当 Knockout 仍在更新订阅者时刷新 UI

javascript - RequireJS 不加载依赖项

javascript - 为什么我的backbone.Collection只有一个元素? (使用 Require、TypeScript、Jasmine)

javascript - Jquery pulsate 完成后可以做一些事情吗?

javascript - 将 PHP MySQL 调用输入 Charts.js

css - 在 <li> 悬停时显示 "Finger"就像它的 <a>

javascript - 在 requirejs 模块 javascript 的函数内部调用函数

javascript - 如何在未在 iframe 中定义的 iFrame 中运行代码?

javascript - 在 *ngif 中将 jQuery 与 Angular2 一起使用不起作用

javascript - 将初始下拉值设置为 viewmodel