是否可以将Dojo与其他JS框架结合起来?

时间:2014-12-18 11:47:54

标签: javascript dojo web-frameworks web-frontend

我们使用Dojo(1.9.3)作为构建单页面应用程序的JS框架。然而,我们在Dojo的怪癖上花费了太多时间,所以即使是简单的任务也需要很长时间才能实现。由于缺乏适当的文档,我们经常不得不求助于阅读源代码然后实现变通方法。

我觉得如果我们转移到其他框架,我们会加快开发速度,并且更容易维护代码。我们的代码库相当大,因为它是一个复杂的应用程序,所以我们没有时间重新编写整个事物。因此,我希望将Dojo与其他框架结合起来是可能的,这样我们就可以逐步远离Dojo。我在业余时间只涉及这些其他框架,并且只写了一些小的示例应用程序,所以我觉得我不能真正说出它们是否能与其他框架很好地配合,所以我希望有些你在那里可以。

我一直在研究的框架 - 根据我的简短调查按照我喜欢的顺序,但我可以自由地说服我。

  1. Ember
  2. 反应
  3. 聚合物
  4. Angular(最后因为我害怕主要的2.0大修)
  5. 虽然主要问题是它是否可行,但如果您认为这样做是个坏主意,请提供建议。

2 个答案:

答案 0 :(得分:10)

我可以从Dojo结尾处说的最多的是Dojo本身是一个工具包,而不是框架本身,因此通常不应该干扰其他脚本或框架。另一方面,反之亦然。因此,尽管我无法代表您列表中的所有选项,但我认为Dojo本身不会妨碍您。

我能想到的一个可能的例外是,如果有任何框架增加了原生原型,特别是Object,因为这会影响所有对象中的可枚举属性,并且会对任何用于...的脚本造成严重破坏。 .in循环没有hasOwnProperty

我能想到的唯一另一个例外是,由于某些原因,任何有问题的框架是否与AMD模块加载器不能很好地共存。

话虽如此,我还建议你采取"承诺"有一点点的框架 - 你说现在你发现使用Dojo实现的东西需要付出努力,当然你列出的框架很有吸引力,因为它们通过提供模式和约定使应用程序开发的某些部分变得容易 - 但问题是您应该问的是,您的框架在您需要在外部或违反这些约定的情况下完成工作时有多难? Dojo可能有学习曲线,但它通常不会阻止你做任何事情。

答案 1 :(得分:6)

您可以一起使用它们,但这也取决于您尝试做什么。有些行动可能需要更多时间进行整合。

Dijit的

我只有Ember.js和AngularJS的经验,但这些框架中的一个常见概念是数据绑定。数据绑定允许您简单地更新模型,视图将反映模型中的更改 但是,这些通常不适用于小部件。小部件(如Dijit库)创建自己的DOM,因此,像Ember.js或AngularJS这样的框架不会“意识到”这些更改,并且在这种情况下无法更新视图。

要使其工作,您必须将小部件包装到组件(Ember.js)或指令(AngularJS)中。可以在this answer中找到此类包装的示例。

依赖加载

依赖加载可能会令人困惑。 AngularJS带有自己的依赖注入系统,这意味着你必须为Dojo模块使用Dojo AMD加载器,为AngularJS使用AngularJS依赖注入。据我所知,两者很好地协同工作(我已经看过使用RequireJS AMD加载器的例子,所以应该可以这样做。)

使用Ember.js我在与AMD加载器集成方面遇到了更多麻烦。 Ember.js(Tom Dale)的创建者不相信AMD,我看到有几个问题试图用AMD加载器加载Ember.js组件。

这完全取决于您希望如何使用这些框架以及您想要做出的额外努力。对我来说,看起来你甚至不确定如何使用这些框架,因为React.js或Polymer与AngularJS或Ember.js的目的完全不同。