代码之家  ›  专栏  ›  技术社区  ›  Jordan Messina

jQuery重构/维护

  •  3
  • Jordan Messina  · 技术社区  · 15 年前

    $('#dialog').html('A TON OF HTML TO BUILD A FORM').dialog('option', 'buttons', { 'Save': function(){$.post('/use/add/', $('#use_form').serialize(), function(data){ ......There were 4 more lines of this but I'm saving you so you don't rip your eyeballs out hopefully you get the idea.....dialog('option','title','New Use').dialog('open');
    

    提前感谢您的帮助!

    6 回复  |  直到 15 年前
        1
  •  6
  •   rfunduk    15 年前

    在正确的范围内定义函数,这没什么大不了的。

    var generateHTML = function() {
      ...
    };
    var somethingElse = function() {
      ...
    };
    
    ... some more ...
    
    $('#dialog').html( generateHTML() )...etc
    

    除了重新组织代码(比如, using an object oriented style )封装代码,使其不那么凌乱。

        2
  •  1
  •   Russ Cam    15 年前

    因为我有很多函数

    如您当前所做的那样使用匿名函数是非常困难的 真正地

    如果跨页面的匿名函数有任何模式,我将尝试重构命名函数,为所需的功能提供公共基础。

    我倾向于避免在jQuery方法调用中或在JavaScript中嵌入大量html字符串 <script> 标记并将其保存在一个单独的位置,以便轻松查询以检索相关内容-这可能是文本文件等。

        3
  •  1
  •   just somebody    15 年前

    我理解你不喜欢命名单独使用的函数,但很容易包含这些名称。模仿作用域的javascript习惯用法是将有问题的代码包装在一个立即调用的匿名函数中:

    (function () {
      var f = function (x) ...
      var g = function (y, z) ...
      // operations involving f and g
    }()); // called immediately
    

    我更喜欢另一种形式,它使代码立即执行的事实更为明显:

    new function () { // called immediately
      var f = function (x) ...
      var g = function (y, z) ...
      // operations involving f and g
    };
    

    还有另一种方法可以使用此创建名称:

    new function (i, j, k) {
      // functions f and g
      f(i, g(j, k));
    }(3, 4, 5);
    
        4
  •  1
  •   Anurag    15 年前

    在jQuery中,很容易陷入永无止境的链接问题。如果使用得当,函数链接是很好的,或者阅读和理解5分钟前编写的代码需要很长时间。从这个意义上讲,按照slebetman的建议格式化您的代码会很有帮助。除此之外,根据某人或其他人的建议确定你的功能范围也会有很大帮助。

    如果您要在重构工作中多走一英里,我建议您考虑一些诸如MVC或MVP之类的体系结构模式来组织代码。一份清单有一个很好的分类 article 用Javascript实现MVC。如果视图和模型分离,它很容易让位于使用自定义事件和大量其他易于重用的添加。它还迫使人们考虑域模型,而不是DOM对象(表、行、div)或事件(单击、键控)等 onPostRollback onPostCreate onCommentAdded 例如,这可能适用于其他情况。jQuery最近增加了对绑定自定义事件的支持,这是一些不错的文章( first , second )解释怎么做。

    一般来说,重用视图是很困难的,但是模型在项目之间变化很小,这是我们可以实现最大重用性的一个领域。

        5
  •  0
  •   slebetman    15 年前

    格式化,格式化,格式化!正确地使用空白,你的代码 可以 看起来可读性:

    $('#dialog').
        html('A TON OF HTML TO BUILD A FORM').
        dialog('option',
            'buttons', {
                'Save': function(){
                    var callback = function(data){
                        // There were 4 more lines of this
                        // but I'm saving you so you don't
                        // rip your eyeballs out hopefully
                        // you get the idea
                    }
                    $.post(
                        '/use/add/',
                        $('#use_form').serialize(),
                        callback
                    )
                 }
             }).
        dialog('option',
            'title',
            'New Use').
        dialog('open');
    

    这就是我个人将如何格式化它。还有其他方法,但我强烈建议在行尾留下大括号/方括号,并使用逗号/点/+,因为javascript有自动添加“;”的倾向在一行的末尾,如果它认为该行是一个完整的格式良好的语句。

    重要的不是您采用什么特定的格式规则。重要的是要始终如一。在某些方面,Python是正确的:有时强迫人们缩进他们的代码是好的(但我讨厌被Python强迫)。

        6
  •  0
  •   reinierpost    15 年前

    我会尽可能多地将代码分解成插件,实际上是围绕这个原则设计代码。不确定这个想法是否符合你的需要。