2013-11-15 5 views
0

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

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. – wootscootinboogie

ответ

1

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

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

Для document.ready обратных вызовов, ссылка на Jquery передается функции обратного вызова:

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

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

+0

Так что все, что мне действительно нужно сделать, это изменить мой IIFE, как у вас в первом блоке кода? Что заставляет работать? Я думаю, что он принимает все параметры, переданные ему, и возвращает jQuery? Я думаю, это работает, потому что я вызываю методы Person внутри jQuery? – wootscootinboogie

+0

* «Что заставляет это работать?» * Я не уверен, что вы имеете в виду. Вы передаете 'jQuery' в качестве аргумента функции и называете параметр' $ '. Поэтому любое использование '$' внутри функции относится к параметру, а не к глобальному '$'. Это то, что вы хотели знать? –

+0

Я сказал, что плохо, допустим, я использовал другую библиотеку, которая использовала $ помимо jQuery, как эти объекты не сталкиваются и беспорядочны (не использует прототип также $)? – wootscootinboogie

0

Как о замене кода на главной странице, как это:

(function($) { 
    $('#btnSubmit').click(function() { 
     var data = { 
      personId: $('#personId').val(), 
      firstName: $('#firstName').val(), 
      lastName: $('#lastName').val() 
     }; 
     Person.insert(data); 
    }); 
}(jQuery)); 
Смежные вопросы