Использование модулей JavaScript во внешних файлах

0

У меня есть скелет модуля, который добавляет запись в базу данных нажатием кнопки.

var Person = (function () {
    var ajaxOpts = {
        type: "POST",
        url: "",
        contentType: "application/json",
        dataType: "json",
        success: function () { },
        error: function () { },
        data: {}
    }
    function insert(data) {
        ajaxOpts.url = "../Service.asmx/InsertPerson";
        ajaxOpts.data = JSON.stringify(data);
        ajaxOpts.error = function (xhr) {
            console.log(xhr.status);

        };
        ajaxOpts.success = function (data) {
            console.log('record successfully added');
            console.log(data.d);

        }
        $.ajax(ajaxOpts);
    };
    return {
        insert: insert
    }
} ());

и я называю это с моей веб-страницы, как:

$(document).ready(function () {
            $('#btnSubmit').click(function () {
                var data = {
                    personId: $('#personId').val(),
                    firstName: $('#firstName').val(),
                    lastName: $('#lastName').val()
                };
                Person.insert(data);
            });
        });

Как я могу изменить этот код, чтобы убедиться, что $ является объектом jQuery, а не другой библиотекой?

  • 0
    В обоих файлах или где именно?
  • 0
    Допустим, оба файла загружены с CDN.
Теги:
module

2 ответа

1
Лучший ответ

Для плагинов вы обычно обертываете код в формате IIFE и сопоставляете jQuery с $. Вы можете сделать то же самое для своего модуля (у вас уже есть IIFE):

var Person = (function($) {
    // ...
}(jQuery));

Для обратных вызовов document.ready обратного вызова передается ссылка на jQuery:

jQuery(document).ready(function($) {
    // ...
});

Просто убедитесь, что вы используете jQuery вне функций.

  • 0
    Так что все, что мне действительно нужно сделать, это изменить мой IIFE так, как будто он есть в вашем первом блоке кода? Что заставляет это работать? Я думаю, что он принимает все параметры, переданные ему и возвращает JQuery? Я предполагаю, что это работает, потому что я вызываю методы Person внутри jQuery?
  • 0
    "Что делает эту работу?" Я не уверен, что ты имеешь в виду. Вы передаете jQuery качестве аргумента функции и называете параметр $ . Поэтому любое использование $ внутри функции относится к параметру, а не к глобальному $ . Это то, что вы хотели знать?
Показать ещё 2 комментария
0

Как насчет замены кода на главной странице следующим образом:

(function($) {
    $('#btnSubmit').click(function () {
        var data = {
            personId: $('#personId').val(),
            firstName: $('#firstName').val(),
            lastName: $('#lastName').val()
        };
        Person.insert(data);
    });
}(jQuery));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню