【问题标题】:How to code jQuery more modularly?如何更模块化地编写 jQuery 代码?
【发布时间】:2011-12-29 16:57:47
【问题描述】:

我正在使用框架 (Django),并且在编写 HTML 方面有很大的灵活性。我一直在想,我编写 jQuery 的方式可能会更好。

以此为例:提交按钮出现在我们网站上的大多数情况下,我们都会将其转换为更漂亮的按钮(采用原始值和行为并基本上替换它)。这只是一个示例,但有很多用例我在网站上放置了 html 的 sn-ps,并且总体结构不知道页面上需要由 Javascript 操作的内容。所以 2 部分问题:在 100 个页面上执行一些只会在 50 个页面上使用的东西是否有效(首先搜索包装集的 jQuery 插件),如果我只想真正使用我的 jQuery 的模块化方法,如何我去吧?

【问题讨论】:

标签: javascript jquery django model-view-controller jinja2


【解决方案1】:

这就是你需要的:http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html。但它仍然是非常实验性的。现在看看 google 关闭工具。

【讨论】:

    【解决方案2】:

    如果您问题中的根本问题是关于Modular programming。我目前正在学习Douglas Crockford's "JavaScript: The Good Parts"

    来自这本书:

    函数是 JavaScript 的基本模块单元。他们是 用于代码重用、信息隐藏和组合。

    因此,就像在 javascript 中所有函数都是对象一样,您可以使用对象字面量表示法将顶级结构定义为模块:

    /* only one global variable to encapsulate all your code */
    
    var MAINOBJ= {};
    
    jQuery(document).ready(function($) {
    
        /* modules */
    
        MAINOBJ.formStuff = {
            results : [],
            myFunction: function (){
                // code
                results = MAINOBJ.ajaxStuff.loadResults();
                // code
            }
        }
    
        MAINOBJ.ajaxStuff = {
            results : [],
            loadResults: function (){
                // code
                return results;
            }
        }
    
        /* DOM traversing */
    
        $('#myForm').submit(function(e) {
            e.preventDefault();
            MAINOBJ.formStuff.myFunction();
        });
    })
    

    实际上是我在 wordpress/joomla 等中构建所有 jquery 代码的方式,我们与许多外国人的 javascript 代码共享相同的范围。

    【讨论】:

    • 我不是在问如何使用对象字面量来组织我的代码...我是在问如何在可以混合和匹配的小型模块化块中实现我的代码。
    • @xckpd7 啊哈。知道了。也许 [youtube.com/watch?v=vXjVFPosQHw] (Nicholas Zakas Scalable JavaScript Application Architecture) 是您正在寻找的。 [net.tutsplus.com/tutorials/javascript-ajax/…] (Writing Modular JavaScript) 中有一个基于此视频的简短教程。
    【解决方案3】:

    通过适当的缓存,拥有单个缩小的 .js 文件肯定更有效。它只会加载一次,每页只有 1 次调用。如果你模块化你的代码,你最终会做更多的请求,而不会节省任何时间来处理额外的 js,因为无论如何它都会被缓存。

    【讨论】:

    • 如果您担心将代码分散到多个文件中:可以(并且应该)将多个源文件连接到一个文件中并进行压缩。但这不是 OP 在编程时应该担心的事情,这严格来说是构建时间问题(或者,如果您有一个即时执行此操作的插件,则为运行时间问题)。在这种情况下,效率不应影响模块化。 (编辑) 但我想我第一次弄错了:你是对的,获取单个 js 文件可能比让此脚本根据需要加载其他模块更有效(如果这是你意思)。
    • 是的,但我要担心的不仅仅是提交...我有表单验证...我有小部件...我的意思是理想情况下我可以在 sn 中添加一些 javascript -ps(我可以那样做吗?)这会是像 pubsub 这样的工作吗?我是否只需识别一个脚本并连续调用 $(document).ready (并且只是准备好缓存文档)?这种方法是否有点过于细分,也许我需要一种模块化调用东西的方法,但在定义代码的方式中更加集中?
    • @xckpd7 我无法回答这个问题,因为这最终取决于您的情况。您想通过模块化代码来解决什么问题?
    • 杂乱无章和不可维护性...我不想一直运行所有东西,也不希望到处都是小块 Javascript。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多