【问题标题】:Fixing a project with multiple Javascript frameworks修复具有多个 Javascript 框架的项目
【发布时间】:2011-01-15 18:35:04
【问题描述】:

我刚开始一份新工作,我的第一个任务是清理网站的 Javascript 代码 - 问题是使用了两个 JS 库(jQuery 和 Prototype / Scriptaculous)。

我正试图弄清楚在哪里使用了什么,但这非常困难,尤其是对代码不是很熟悉。

有人有什么建议吗?如果可能的话,我可能更愿意放弃 Prototype / Scriptaculous。

【问题讨论】:

    标签: javascript jquery prototypejs javascript-framework scriptaculous


    【解决方案1】:

    我会从所有页面上的所有包含中删除原型,删除 jquery 中的 noconflict,然后让 firebug 准备好向我显示所有错误,并一一检查所有页面,用 jquery 等效函数替换函数,直到一切正常.

    .. 对接方法疼痛,但怀疑你会发现不那么痛苦。 可能会有所帮助:http://api.jquery.com/browser/

    【讨论】:

      【解决方案2】:

      这是一项艰巨的任务。如果一切正常,建议同时使用这两个框架并让它们继续存在并不是一个坏的建议。如果它们真的驻留在同一页面上,那么 jQuery 很可能处于 noConflict 模式。

      一个非常有用的工具是使用 Firefox 的 Web Developer Toolbar 并导航到页面并执行:Information -> View JavaScript - 这将为您提供所有加载有 <script> 标签的 JavaScript 脚本的完整列表,如以及 <script> 标记中的内联 JavaScript,尽管我认为内联事件处理程序未在此处列出。

      但您可以做的一件事就是简单地解开 Prototype 或 JavaScript 的钩子,看看哪一个会导致错误更少。然后你就可以调试缺少的东西了。

      在一个库上标准化更容易,但也有理由提出“如果它没有损坏,就不要修复它”。

      我花了一些时间来了解所有框架,在相同的 HTML 上执行相同的效果:ArtLung Rosetta:您可以通过比较 thisthis.

      祝你好运!

      【讨论】:

        【解决方案3】:

        特别是摆脱 Prototype 可能会非常困难,尤其是如果有人在代码库上工作并真正“获得”了 Prototype。我在这里说的是我自己,我曾在一个非常大的 Web 应用程序上工作过,实际上它完全符合您的描述(尽管我认为当我离开 Scriptaculous 的时候,这些东西已经消失了)。

        由于 Prototype 的工作方式,绝对无处不在。

        【讨论】:

          【解决方案4】:

          很有可能,Prototype 将使用 $ 变量,而 jQuery 将在 noConflict 模式下运行,因此它将被 jQuery 变量引用。

          它可能会变得很棘手,例如:

           // here $ = Prototype
          
           jQuery(function($){
               // here $ = jQuery
          
           });
          
           // here $ = Prototype
          

          在单独的文件中:

          // here $ = Prototype
          (function($){
              // here $ = jQuery;
          })(jQuery);
          // here $ = Prototype
          

          关注您的上下文以查看正在引用的库非常重要。此外,如果您对如何在 jQuery 中做一些在 Prototype 中完成的事情感到困惑,请perfectly acceptable 在这里提问。

          【讨论】:

          • 这只是冰山一角。 Prototype 中的'$' 只做相对有限的事情,不像jQuery 的'$' 几乎可以做所有事情。因为 Prototype 将各种功能放在各种基本对象原型上,所以尝试找到它们会很痛苦。例如,jQuery "$.each()" 在 Prototype 中作为基本的 Array 操作完成。
          • @Pointy,非常正确。但就区分库而言,只要你知道$ = jQuery 的时间,jQuery 的东西应该很容易被发现。然而,当 Prototype 的东西看起来像原生功能时,就很难确定了。
          • 是的,虽然一旦你找到它,那么你就必须重写它:-) 我同意“不要这样做”的答案,我认为!
          【解决方案5】:

          我不建议放弃 javascript 库,因为这将是一个横向变化。非常危险,现在和将来都会导致虚假错误。

          【讨论】:

            猜你喜欢
            • 2019-03-10
            • 1970-01-01
            • 2014-04-09
            • 1970-01-01
            • 1970-01-01
            • 2023-01-08
            • 2018-06-12
            • 2011-10-13
            • 2016-02-29
            相关资源
            最近更新 更多