2016-07-04 2 views
1

У меня есть инструмент, который позволяет пользователю создавать панель инструментов и добавлять к ней виджеты. Каждый виджет - это собственный JS-файл, который загружается на страницу.область jQuery с несколькими функциями

Чтобы сохранить все то же самое по всей доске, я создаю функцию под названием load, которая запускается, когда документ готов.

Проблема состоит в том, что каждый из всех включенных в комплект модулей имеет ту же функцию, что и функция 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 
} 

Я думаю, мой вопрос .. С множеством функций, вызываемых load в различных JS файлов, включенных, как я могу вызвать один конкретный в отдельный файл?

+0

Можете ли вы объяснить немного больше? Может включать содержимое файла образца и фрагмент кода выше взаимодействия с тем же – binariedMe

+0

Два слова: загрузчик модуля. (Например, Rollup, Browserify, RequireJS, Webpack и т. Д.) – gcampbell

+0

@binariedMe - каждый модуль (js include) структурирован таким же образом. При готовности он запускает функцию загрузки, которая что-то делает для DOM. Представьте, что 5 js включает все с тем же именем функции, что и 'load'. Как правило, это не должно быть проблемой, поскольку я думаю, что все они находятся в пределах их собственного объема файла, но я не считаю, что мой настроен как таковой. Он вызывает нагрузку и запускает ее в других файлах, которые также содержат эту функцию, а не только ее собственную. – SBB

ответ

1

@binariedMe правильно .. Там нет ничего, как объем файла в JavaScript .. Это можно сделать, как если у вас есть какой-либо объект, отдельный в каждом файле, так что вы можете записать следующим образом ...

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

И вы можете вызвать object.load для каждого модуля, который вы загружаете ... !!

+0

Это может быть что-то, что я мог бы сделать - любой шанс вы могли бы настроить эту скрипку, чтобы показать ее размещение? https://jsfiddle.net/ep6vurfL/ – SBB

+0

Есть ли там уникальный объект? Потому что если он глобальный, мы можем иметь как 'department.load = function() {// здесь что-то делать}' –

+0

хорошо моя цель заключалось в том, что ему не нужно было указывать что-либо конкретное для собственно модуля, например, такое соглашение об именах. Я в основном хочу создать «шаблон», который я могу просто скопировать и использовать, когда это необходимо. Поэтому, независимо от того, на что он был вызван, если бы все они были одинаковыми в каждом JS, это не имело бы для меня значения. – SBB

0

Проблема может быть в том, что вы объявляете функцию загрузки в каждом файле js глобально. Я создал плункер с той же настройкой, и каждая функция загрузки работает изолированно от другого. Пожалуйста, проверьте 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. 
})(); 
Смежные вопросы