当您将 knockoutjs 与 requirejs 一起使用并遵循 MVVM 模式并实现这样的 knockoutjs 数组扩展时,您将其放在哪里?
直接在ViewModel里用在什么地方?
或者在像 ObservableExtensions.js 这样的额外 javascript 文件中,然后像使用自定义绑定处理程序那样注入 requirejs?
ko.observableArray.fn.doSomething = function(other) {
};
当您将 knockoutjs 与 requirejs 一起使用并遵循 MVVM 模式并实现这样的 knockoutjs 数组扩展时,您将其放在哪里?
直接在ViewModel里用在什么地方?
或者在像 ObservableExtensions.js 这样的额外 javascript 文件中,然后像使用自定义绑定处理程序那样注入 requirejs?
ko.observableArray.fn.doSomething = function(other) {
};
就像@RP Niemeyer 评论的那样,我还放置了单独的绑定、扩展和视图模型。原因是它允许对前端代码进行更模块化的设计。您永远不知道何时需要重用功能。它还允许我专门为绑定、扩展和视图模型编写单独的单元测试,而无需测试它们如何相互交互,基本上将它们分解为可能的最小单元。
\js
\js\tests
\js\tests\knockoutExtensionTests
\js\tests\jqueryExtensionTests
\js\tests\firstBindingTest.js
\js\tests\secondBindingTest.js
\js\tests\firstVmTest.js
\js\tests\secondVmTest.js
\js\extensions
\js\extensions\knockoutExtension.js
\js\extensions\jqueryExtensions.js
\js\bindings
\js\bindings\firstBinding.js
\js\bindings\secondBinding.js
\js\viewmodels
\js\viewmodels\firstVM.js
\js\viewmodels\secondVM.js
我也不会将其限制为仅淘汰扩展,因为您永远不知道何时可能需要扩展另一个库(如 jQuery)以添加更多功能。这可能看起来需要单独加载很多文件,但是使用目前的捆绑和缩小工具,在生产中您几乎不会注意到。