【问题标题】:Is it possible to combine Dojo with other JS frameworks?是否可以将 Dojo 与其他 JS 框架结合起来?
【发布时间】:2015-02-17 04:46:41
【问题描述】:

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

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

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

  1. 灰烬
  2. 反应
  3. 聚合物
  4. Angular(最后是因为我害怕 2.0 大修)

虽然主要问题是它是否可能,但如果您认为这样做是个坏主意,请提出建议。

【问题讨论】:

    标签: javascript dojo web-frameworks web-frontend


    【解决方案1】:

    从 Dojo 方面我能说的最多的是,Dojo 本身是一个工具包,而不是框架本身,因此通常不应干扰其他脚本或框架。另一方面,不能总是说反过来。因此,虽然我不能代表您列表中的所有选择,但我认为 Dojo 本身不会妨碍您。

    我能想到的一个可能的例外是,如果任何有问题的框架增加了本机原型,尤其是 Object,因为这将影响所有对象中的可枚举属性,并可能对任何使用 for...in 的脚本造成严重破坏没有hasOwnProperty的循环。

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

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

    【讨论】:

    • 感谢您的意见。关于其他框架的“承诺”:我只是觉得当您在 Dojo 上遇到困难时,可以找到有关如何做事的信息或帮助,而且由于其他框架更受欢迎,我希望使用它们会更容易。
    • 你应该尝试 Dojo 的邮件列表,irc.freenode.net 上的#dojo,或者更频繁地使用这个 SO 标签:D
    【解决方案2】:

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

    迪吉特

    我只使用过 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 完全不同。

    【讨论】:

    • 感谢您的意见。是的,我同意 React 和 Polymer 与 Angular 和 Ember 不同,因为它们提供了一种制作组件的方法,但我不确定我们要走哪条路。但我觉得第一步是检查是否有可能这样做。
    • 这是一个很好的答案。将 Dijit 小部件集成到 Angular 数据绑定场景中的困难绝对是令人沮丧的真正根源。就将 Angular 与 AMD 或其他模块格式一起使用而言,它实际上非常可行,具体取决于您构建应用程序的方式。关键是不要在其定义站点使用angular.module('app').service(...) 注册指令、服务等,而是将它们定义为模块。那么你只需要在几个地方担心 angular 的全局性,你的代码会更干净,更便携。
    猜你喜欢
    • 2018-06-21
    • 2020-06-30
    • 1970-01-01
    • 2012-07-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多