具有多个函数的jQuery作用域

时间:2016-07-04 17:54:23

标签: javascript jquery

我有一个工具,允许用户创建仪表板并向其添加小部件。每个小部件都是自己的JS文件,加载到页面中。

为了使所有内容保持一致,我创建了一个名为load的函数,该函数在文档准备就绪时触发。

问题是,所包含的每个其他模块都具有相同的功能,称为负载,这会导致问题。

虽然我可以将函数名称更改为唯一的函数,但我想看看是否可以将它们保持在它们被锁定到它们所在文件范围内的所有位置?

/*
Module Details: Department Links - A collection of links specific to the users department or selected department
*/

$(function() {

  // Define our moduleID
  var moduleID = 1;

  // Load our module
  load(moduleID, '', false);

  // Create a event for dropdown change
  $('body').on('select2-selecting', '#Department_' + moduleID, function (e) {
    // When the user picks a department, reload this module and fetch those department links.
    load(moduleID, e.val, true);
  });

});

/*
  Load the module
  @moduleID: required.
  @departmentID: if not passed, the SP will use the viewers departmentID.
  @reload: passed when changing the dropdown so we only render the new data and not the whole module
*/
function load(moduleID, departmentID, reload){

    ... Do other stuff here
}

我想我的问题是..在包含的各种js文件中有多个名为load的函数,如何触发特定于自己文件的函数?

2 个答案:

答案 0 :(得分:1)

@binariedMe是正确的..在JavaScript中没有像文件范围那样的东西。如果你有任何在每个文件中分开的对象,你可以这样做,所以你可以写如下......

`Object.load = function (){
      // do stuff
 }`

你可以为你正在加载的每个模块调用object.load ...... !!

答案 1 :(得分:0)

问题可能是因为您将在每个js文件中全局声明加载函数。我创建了一个具有相同设置的plunker,每个加载功能都与其他功能隔离。 请在此处查看plunker https://plnkr.co/edit/uZJ8FFwJMfEvPsWAFWwE?p=preview

(function(){ //stuffs of each file
    // Don't put any global variable unless you want no scope isolation for the same.
 })();