有没有更好的方法将 javascript 组织在单个文件中,并为多个页面提供特定代码?

2023-12-23

我有几个网站,我使用相对少量的 jQuery 在页面上执行各种操作。一般来说,我们谈论的是每页几十行代码。

我将所有 JS 保存在一个文件中,只要它不是很大并且定义相当清晰。也就是说,我倾向于这样组织它:

$(document).ready(function(){
  var onPage1 = $("#id_thing_on_1").length === 1;
  if( onPage1 ){
    var usefulPage1Function = function(){}; //blah
    $("a").click(function(){}); //etc
  }
});

$(document).ready(function(){
  var onPage2 = $("#id_of_page_2").length === 1;
  if( onPage2 ){
    $(".someClass").fadeIn().click(function(){}); //etc
  }
});

任何东西is在多个页面上使用的内容会被取出到库中,但对于页面特定的内容,这是我一直遵循的模式。是否有更好的方法,或者这是将 JS 保存在一个文件中并将其加载到多个页面上的可接受的做法?


我很想知道其他人对此的看法,但我为每个页面组织和执行正确的 JS 代码集的做法是拥有一种路由引擎作为我的 js 应用程序的基础,在其中添加一个“控制器” ' 每个部分将其自身添加到的列表,路由引擎根据 url 调用controller.init() 方法。

myApp = {};

(function(app, $) {
    var defaultController = "Default";

    var routes = [];
    routes["Default"] = defaultController;

    var currentControllerFromUrl = function() {
        // match urls in the form ../mvc/controllerName.mvc/...
        var re = new RegExp(/\/(\w*)/i);
        var m = re.exec(document.location);
        if (m == null) {
            return null;
        }
        else {
            return m[1];
        }
    };

    var currentActionFromUrl = function() {
        // match urls in the form ../mvc/controllerName.mvc/action/
        var re = new RegExp(/\/mvc\/\w*.mvc\/(\w*)(\/|\b)/i);
        var m = re.exec(document.location);
        if (m == null) {
            return null;
        }
        else {
            return m[1].toLowerCase();
        }
    };

    var currentWebPageFromUrl = function() {
        var re = new RegExp(/\/(\w*).html/i);
        var m = re.exec(document.location);
        if (m == null) {
            return null;
        }
        else {
            return m[1];
        }
    };

    var populateControllerRoutes = function(app) {
        for (var ctl in app.controllers) {
            routes[ctl] = ctl;
        }
    };


    var theApp = {
        controllers: {},
        run: function() {
            this.initController();
        },
        initController: function() {
            var urlController = currentWebPageFromUrl();
            // populate routes
            populateControllerRoutes(this);
            if (urlController && routes[urlController]) {

                // load the correct controller into the activeController
                this.controller = new this.controllers[routes[urlController]]();
                this.controller.init();

                var action = currentActionFromUrl() || "index";
                if (action && this.controller[action + "Action"] !== undefined)
                    this.controller[action + "Action"]();

            }
        }

    };

    window.myApp = $.extend(app, theApp);
})(myApp || {}, jQuery);


// and somewhere else
(function($) {
    myApp.controllers.default = function() {
        this.init = function() {
        };

        this.indexAction = function() {
            // index action init
            $("#res").text("hi there!");
        }
    }
})(jQuery);

$(function() {
    myApp.run();
});

通过这种方法,控制器函数不需要位于一个文件中,因此在开发过程中,您可以将控制器函数保存在单独的文件中,组织良好,并作为构建/部署的一部分,将它们组合起来并将它们全部最小化到一个 JS 文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有更好的方法将 javascript 组织在单个文件中,并为多个页面提供特定代码? 的相关文章

  • jQuery 中的目标 @import 没有 ID 也没有其他属性

    我有这个 jQuery 代码 document ready function function adjustStyle width width parseInt width if width lt 701 style type text c
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • Jquery 数据表列总和

    我只是参考一下这个链接 https datatables net examples advanced init footer callback html了解如何获取 jquery 数据表中的列总计 但我已经完成了一半的项目 我在html页面
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • Firefox 不会在使用 jQuery AJAX 加载的内容上呈现 CSS 样式

    我有一个网站 允许用户对书籍和文章发表评论 主表单有一个搜索输入 用于查找相关书籍或文章 来源 我使用 jQuery 根据输入的搜索词从外部站点动态加载新源 然后还使用 AJAX 返回列表中的源 我有两个问题 现在 在用户输入四个字符后 j
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev
  • 循环内的异步性

    我正在使用 jQuery getJSON 用于从一组实用程序的给定 URL 检索数据的 API 我真的很想找到一种为每个实用程序重用代码 完全相同 的方法 由于循环的执行与 ajax 调用无关 因此我无法找到保留循环值的方法 我知道这个描述

随机推荐