2
我正在构建一个使用RequireJS模块化它的KnockoutJS Web应用程序。我试图在几个策略之间做出决定,将事情分解成模块。模块粒度策略
平方法:
一种方法有更平坦的目录结构和较大的模块:
/webapp
|-/scripts
|-/templates
| |-car_edit.html
| |-car-view.html
| |-person_edit.html
| |-person_view.html
|-main.js
|-person.js
|-car.js
作为示例,人模块(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
};
});
深层结构的方法:
另一个approa CH,就可以使用更深的目录结构用较小的模块:
/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) { ... };
});
等等。
两种方法都是首选吗?我错过了更好的方法吗?
我倾向于接近你的第一种方法。然而。我还有一个viewmodel子文件夹,以及main.js,person.js和car.js会存在的地方。显然这两种方式工作。它只是保持所有编码器始终如一地创建文件 – Anton