当前位置:  开发笔记 > 编程语言 > 正文

jQuery和"有组织的代码"

如何解决《jQuery和"有组织的代码"》经验,为你挑选了3个好方法。

我最近一直在努力理解组织jQuery代码的最佳方法.我之前问了另一个问题,我认为我不够具体(在这里的问题中找到).

我的问题是,你做一个应用程序越丰富,你的客户端就越快失控.考虑这种情况......

//Let's start some jQuery
$(function() {        
    var container = $("#inputContainer");

    //Okay let's list text fields that can be updated
    for(var i=0; i < 5; i++) {

        //okay let's add an event for when a field changes
        $("").change(function() {

            //okay something changed, let's update the server
            $.ajax({
                success:function(data) {

                    //Okay - no problem from the server... let's update
                    //the bindings on our input fields
                    $.each(container.children(), function(j,w) {

                        //YIKES!! We're deep in here now!!
                        $(w).unbind().change(function() {

                            //Then insanity starts...

                        }); // end some function

                    }); //end some loop

                } // what was this again?

            }); //ending something... not sure anymore

        }).appendTo(container); //input added to the page... logic WAY split apart

    }; //the first loop - whew! almost out!

});  //The start of the code!!

现在这种情况并非不可能.我并不是说这是正确的方法,但是在jQuery命令中发现自己的几个级别并开始怀疑在屏幕开始融化之前可以添加多少逻辑并不罕见.

我的问题是人们如何管理或组织限制代码的复杂性?

我列出了我在其他帖子中的表现 ......



1> John Resig..:

只想添加前面提到的内容:

$.each(container.children(), function(j,w) {
    $(w).unbind().change(function() { ... });
});

可以优化为:

container.children().unbind().change(function() { ... });

这一切都与链接有关,这是简化代码的好方法.


伙计,你知道什么,约翰.

2> David Alpert..:

到目前为止,我这样做:

// initial description of this code block
$(function() {        
    var container = $("#inputContainer");

    for(var i=0; i < 5; i++) {
        $("").changed(inputChanged).appendTo(container);
    }; 

    function inputChanged() {
        $.ajax({
            success: inputChanged_onSuccess
        });
     } 

     function inputChanged_onSuccess(data) {
        $.each(container.children(), function(j,w) {
          $(w).unbind().changed(function() {
             //replace the insanity with another refactored function
          });
        });
      }
});

在JavaScript中,函数是第一类对象,因此可以用作变量.



3> Peter Bailey..:

嗯,首先,拥有一个理解javascript的好IDE可以提供很大帮助,即使只是为了识别匹配的分界线(括号,parens等).

如果你的代码开始变得那么复杂,可以考虑制作自己的静态对象来组织混乱 - 你不必非常努力地保持一切匿名.

var aCustomObject = {
    container: $("#inputContainer"),
    initialize: function()
    {
        for(var i=0; i < 5; i++)
        {
            $("").changed( aCustomObject.changeHandler );
        }
    },
    changeHandler: function( event )
    {
        $.ajax( {success: aCustomObject.ajaxSuccessHandler} );
    },
    ajaxSuccessHandler: function( data )
    {
        $.each( aCustomObject.container.children(), aCustomObject.updateBindings )
    },
    updateBindings: function( j, w )
    {
        $(w).unbind().changed( function(){} );
    }
}
aCustomObject.initialize();


该对象的目的不一定是组织,虽然这是一个很好的辅助优势,但保持全局命名空间消耗尽可能小.我认为这根本不符合他们的"预期目的".这种想法是极度限制的.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有