当前位置: 首页 > 知识库问答 >
问题:

如何将DRY原理应用于javascript和查询

胡禄
2023-03-14

我有大约30个网页,都是超文本标记语言表单。每个页面都有两个或更多不同的表单元素——选择、输入文本、复选框、文本区域——以及各种用户界面元素、弹出窗口、表单验证等。我正在尝试重构页面中使用的jQuery以使用DRY原理,但不确定如何做到这一点。这里有一些使用的jQuery示例:

示例代码块A:

    $(".show-tool", _container).mouseover(function() {
        $(this).nextAll(":hidden").css('display','block');
    });

示例代码块B:

$(".optional").blur(function(){
    if ($(this).val() == '') 
    { 
        $(this).addClass('optional'); 
        $(this).val('(Optional)');
    }
});

示例代码块C:

$('.howtoremain').click(function() {
    $('.hiddendiv').slideToggle("10000");
    if($(this).hasClass('howtoremain')) {
        $(this).removeClass('howtoremain').addClass('howtoremain2');
    }
    else {
        $(this).removeClass('howtoremain2').addClass('howtoremain');
    }
});

所有这些都包含在文件中。准备好的上面的实际代码列表没有那么重要。我试图让每个HTML页面只包含相关的jquery代码。例如,第1页可能使用代码块A和B。第2页可能使用A、B、C、D、E和F。第3页可能使用代码块C和G。而不是一个巨大的文档。每个代码块都准备好了(如果同一表单元素的一个代码块需要与另一个代码块稍有不同,那么在某个时候可能会导致bug),您如何进行编码?每个代码块有一个javascript文件似乎也很糟糕,因为它会导致每个页面对服务器的多次点击。我想我正在尝试获取一个大的javascript文件,但只在文档中进行初始化。准备好与每个页面相关的功能。

共有1个答案

袁谭三
2023-03-14

在我的项目中,我已经开始在每个模块中使用多个JS文件,并将它们连接到构建过程中的闭包中。这类似于jQuery在其构建过程中所做的工作(参见intro.js、outro.js)

通过这种方式,我可以在较小的文件中使用细粒度、干燥的模块,然后将它们连接起来。对于示例B,典型的单模块文件可能如下所示:

( function($) {
    var subjects = $('.optional');
    if ( subjects.length === 0 ) {
        // this is a knockout criteria for this module, thus exit this enclosed function
        return;
    }

    subjects.blur(function(){
        if ($(this).val() == '') 
        { 
            $(this).addClass('optional'); 
            $(this).val('(Optional)');
        }
    });

    // now use whatever you need to initialise.
})($);

如您所见,我使用outer函数不仅是为了保持范围干净,更重要的是,我能够在意识到当前页面/事件/…-当然,您可以找到几种更有效的方法来确定每个模块是否应该初始化自身。

在一些项目中,我有一个构建脚本,用于将这些模块连接到另一个闭包中,该闭包可能如下所示:

( function( window ) {
    var $ = window.jQuery; //call me paranoid, but I like my vars clean
    $(document).ready( function() {
        // stuff the modules here, one after another, in any sensible order.
    });
}(window);

在其他项目中,我可以移动<代码>$(文档)。ready()-输入文档所在的模块。准备就绪是必要的,并且倾听其他人内部的其他初始化事件,这对我来说有点干净。

但不管怎样-拥有

  • 构建过程,而不是大量的单个请求

显着改善了我的干燥度,甚至改善了我的JS代码风格。

 类似资料:
  • 我有一个特殊的情况,我需要捕获异常并将一个对象返回给客户端来代替异常。我不能将异常处理逻辑放在更高的级别,即将 Foo 包装在 try 子句中。 最好用一些样本代码来演示。异常处理逻辑模糊了方法的意图,如果我有,许多相似意图的方法,在Foo类中,我发现自己重复了大部分catch逻辑。 在下面的代码中包装常见异常功能的最佳技术是什么?

  • 主要内容:1.DRY 原则,2.实现逻辑重复,3.功能语义重复,4.代码执行重复,5.注释重复,6.数据重复,7.提高代码复用性1.DRY 原则 它的英文描述为:Don’t Repeat Yourself。中文直译为:不要重复自己。将它应用在编程中,可以理解为:不要写重复的代码。 很多人对这条原则存在的误解。实际上,重复的代码不一定违反 DRY 原则,而且。 DRY不是只代码重复,而是“知识”的重复,意思是指业务逻辑。例如由于沟通不足,两个程序员用两种不同的方法实现同样功能的校验。 2.实现逻辑

  • 问题内容: 我正在尝试在NestJs控制器中同时应用和参数。 目的是仅适用于Body DTO中的所有参数,但所有参数均适用。 但是,我似乎无法按照我想要的方式来应用两个管道。这是我所拥有的: 我试图让另一个人使用该变压器,但这不起作用。 我怎样才能同时应用和应用参数? 问题答案: 如果应用到PARAM,它只会改变,但没有财产的,在这里它会留一个。 相反,您可以使用将参数转换为: 然后将搭配使用选项

  • 本文向大家介绍JavaScript原型对象原理与应用分析,包括了JavaScript原型对象原理与应用分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript原型对象原理与应用。分享给大家供大家参考,具体如下: 原型对象: 每个对象都有一个参考对象,这个参考对象称之为原型对象。原型对象有自己的属性和方法。当A是B的原型对象时,那么B拥有A中的所有属性和方法。 原型对象的工作

  • 问题内容: 我有一个简单的页面,其中包含一些iframe部分(以显示RSS链接)。如何将相同的CSS格式从首页应用到iframe中显示的页面? 问题答案: 编辑:除非设置了适当的CORS标头,否则这不能跨域工作。 这里有两件事:iframe块的样式和嵌入在iframe中的页面的样式。您可以按通常方式设置iframe块的样式: 必须通过将iframe中嵌入的页面样式包含在子页面中来进行设置: 或者可

  • 问题内容: 我有连接3个表的SQL查询,一个表只是将其他两个表连接起来的多对多表。我使用Spring JDBCResultSetExtractor将ResultSet转换成我的Objects,看起来像这样: ResultSetExtractor实现如下所示: 无需分页即可正常工作。 但是,我需要对这些结果进行分页。我通常的做法是将其添加到查询中,例如: 但是,由于此查询具有联接,因此当我限制结果数