这个问题必然是主观的,但我不得不回答你上面的每一个观点:
虽然完整的 Dojo Toolkit 源代码很大(主要是因为 dojox),但它不必臃肿 - 并不是说您被迫在其中加载几乎所有内容,您实际上只加载了您需要的内容。构建系统还可以将您的大部分依赖项减少到两个 JS 文件(模块 + i18n 包),而对于结构良好的应用程序(即具有可以轻松确定依赖项的主要顶级模块)的额外工作很少。
Dojo 和 Dijit 的文档现在比几年前要好得多,当时它可能因此而声名狼藉。除了参考指南,还有超过 50 个教程。
与不打算做那么多的更小或更简单的库相比,Dojo 肯定看起来很复杂,但我不会认为它比大型单页 Web 应用程序需要的更复杂。事实上,我会更早说,如果你从给你的灵活性要低得多的东西开始,然后发现你需要把东西拼凑在一起来填充,你最终可能会得到更复杂的东西(并且更不容易维护!)缺口。
Dojo 提供了一个内聚的工具包,包括以下开箱即用的工具:
- 模块依赖系统(支持 AMD,RequireJS 实现的同一个标准)
- 强大的继承和混合功能
dojo/_base/declare
- 中基于 Promise 的直观 XHR API
dojo/request
,可以通过以下方式增强/扩展dojo/request/registry
- 支持使用
dojo/i18n!
插件本地化您的应用程序
- Dijit 中完整的可样式化和可访问小部件库
- 内聚的数据 API
dojo/store
如果您觉得自己不需要所有这些,或者自己也很自在,那么这取决于您,但完成所有这些并保持其凝聚力和可维护性是一项艰巨的任务,这正是 Dojo 为您提供的-开始。
关于使用哪个 UI 库,虽然我不能说我已经广泛使用 jQuery UI,但我至少会说,如果完全关心可访问性或灵活性/可扩展性,我会在一周中的任何一天选择 Dijit .
对于您关于同时使用 Dojo 和 jQuery 的问题,Dojo 通常不会妨碍其他库。其他一些较旧的库喜欢向本机原型添加可枚举属性,这可能会在 Dojo(以及其他任何人的代码)中抛出不受保护的 for...in 循环,但 jQuery 不会这样做。此外,jQuery 支持作为 AMD 模块加载,因此您甚至可以将它与 Dojorequire
和define
.