Javascript 可以将Dojo与其他JS框架结合起来吗?

Javascript 可以将Dojo与其他JS框架结合起来吗?,javascript,dojo,web-frameworks,web-frontend,Javascript,Dojo,Web Frameworks,Web Frontend,我们使用Dojo(1.9.3)作为构建单页应用程序的JS框架。然而,我们在Dojo的怪癖上花费了太多的时间,所以即使是简单的任务也需要很长的时间来实现。由于缺乏适当的文档,我们通常不得不阅读源代码,然后实施变通方法 我觉得如果我们转移到其他框架,我们会加快开发速度,并使代码维护变得更容易。我们的代码库相当大,因为它是一个复杂的应用程序,所以我们没有时间一次重写整个程序。因此,我希望有可能将Dojo与其他一些框架结合起来,这样我们就可以逐渐远离Dojo。我只是在业余时间涉猎过这些其他框架,并且只编

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

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

我一直在研究的框架——根据我的简短调查,按照我喜欢的顺序,但请随意说服我

  • 余烬
  • 反应
  • 聚合物
  • 角度(最后一个原因是我害怕2.0大修)

  • 主要的问题是它是否可能,如果您认为这样做是一个坏主意,也请给出建议。

    从Dojo的角度来看,我最多可以说Dojo本身是一个工具包,而不是一个框架本身,因此通常不应该干扰其他脚本或框架。另一方面,情况并非总是相反。因此,虽然我不能代表您列表中的所有选项,但我不认为Dojo本身会妨碍您

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

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


    话虽如此,我也建议您对框架的“承诺”持保留态度-您说现在您发现使用Dojo实现东西需要付出努力,当然,您列出的框架是有吸引力的,因为它们通过提供模式和约定使应用程序开发的某些部分变得容易——但您应该问的问题是,当您需要做一些超出或违背这些约定的事情时,您的框架会使您的工作变得有多困难?Dojo可能有一个学习曲线,但它通常不会阻止你做任何事情。

    你可以一起使用它们,但这也取决于你想做什么。某些操作可能需要比其他操作更多的时间进行集成

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

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

    依赖项加载 依赖项加载可能会令人困惑。AngularJS自带了自己的依赖注入系统,这意味着您必须为Dojo模块使用Dojo AMD加载程序,为AngularJS使用AngularJS依赖注入。据我所知,这两种方法可以很好地协同工作(我已经看到了使用RequireJS AMD loader的示例,所以这应该是可能的)

    使用Ember.js,我在与AMD装载机集成时遇到了更多的麻烦。Ember.js的创建者(Tom Dale)不相信AMD,我也看到过一些试图用AMD加载器加载Ember.js组件的问题


    这完全取决于您希望如何使用这些框架,以及您希望做什么额外的工作。在我看来,您甚至不确定这些框架的用途,因为React.js或Polymer的用途与AngularJS或Ember.js完全不同。

    谢谢您的输入。关于其他框架的“承诺”:我只是觉得当你在Dojo上遇到困难时,你可以找到关于如何做事情的信息或帮助,而且由于其他框架更受欢迎,我希望使用它们会更容易。你应该试试Dojo的邮件列表,irc.freenode.net上的#Dojo,或者更经常地使用这个标签:DThanks,谢谢你的输入。是的,我同意React和Polymer不同于Angular和Ember,因为它们提供了一种制造组件的方法,我不确定我们要走哪条路。但我觉得第一步是检查是否有可能这样做。这是一个很好的答案。将Dijit小部件集成到角度数据绑定场景中的困难无疑是令人沮丧的真正原因。就AMD或其他模块格式使用Angular而言,它实际上相当可行,这取决于您如何构造应用程序。关键是不要在定义站点向
    angular.module('app').service(…)
    注册指令、服务等,而是将它们定义为模块。然后,您只需要在一些地方担心angular的全局性质,您的代码将更干净,更便于移植。