Прежде всего, позвольте мне прояснить, что я не очень хорош в jQuery, поэтому я прошу гуру здесь помочь.
Существует большая часть JS-кода, который я хочу расширить в некотором роде. Пожалуйста, имейте в виду, что я ничего не могу изменить в этой части. Я могу вставить еще один JS файл в HTML ниже оригинала, который должен будет расширить метод в исходном JS файле.
Итак, исходный JS файл (калечащий из коммерческого сообщества) заключается в следующем:
var memberlist = {};
(function($){
memberlist = function($){
var currentOptions = {
//...
},
coreOptions = {},
//...
resultsCache = {};
//-------------------------------------
// PUBLIC METHODS
var init = function( url, defaultType ){
//...
},
getOption = function(option){
return currentOptions[ option ];
},
setOption = function( option, value ){
currentOptions[ option ] = value;
};
//-------------------------------------
// PRIVATE METHODS
var toggleType = function(e)
{
//...
},
// A DOZEN OTHER METHODS HERE
// THIS IS THE METHOD WHERE I NEED TO PLANT A DOZEN MORE IF CHECKS PREFERABLY IN THE BEGINNING OF THE METHOD
doAdvancedSearch = function(e){
//...
if( !$("#f_inc_secondary").is(':checked') )
{
vals['f_inc_secondary'] = 0;
}
//...
};
//-------------------------------------
// Make public methods public
return {
init: init,
getOption: getOption,
setOption: setOption
};
}($);
}(jQuery));
Кто-нибудь достаточно, чтобы помочь мне достичь этого, пожалуйста?
Вы просто пытаетесь добавить другие функции/функции функций в doAdvancedSearch
? Просто передайте массив ссылок на функции, пройдите через них и вызовите их, когда вы выполните итерацию:
doAdvancedSearch = function(e, otherFunctionalityArray){
if( !$("#f_inc_secondary").is(':checked') )
{
vals['f_inc_secondary'] = 0;
}
$.each(otherFunctionalityArray, function(){
this();
});
};
// Function would be called by doAdvancedSearch(e, [func1, func2, func3...]);
Вы можете использовать вышеуказанный код самостоятельно, если вы можете doAdvancedSearch
конфиденциально. Если вам нужно что-то публичное:
// Create a private member in your initial variable definitions
var currentOptions = {
//...
},
coreOptions = {},
//...
resultsCache = {},
additionalAdvancedSearchFunctions = [];
...
// Create another public method and make it public
addAdvancedSearch = function(newFunctions){
this.additionalAdvancedSearchFunctions = newFunctions;
}
...
//Adjust your method call
doAdvancedSearch(e, this.additionalAdvancedSearchFunctions);
Имейте в виду, мы понятия не имеем, какую логику вы планируете делать в doAdvancedSearch
. Какая логика, которую вы планируете делать в doAdvancedSearch
, зависит от вас.
PS Это не сценарий jQuery .extend()
; Более того, расширьте свой сценарий кода.
doAdvancedSearch
вызывается нажатием кнопки, потому что этот метод должен быть общедоступным. Сам метод не является общедоступным, и нет никакого открытого метода, который doAdvancedSearch
либо образом предоставляет doAdvancedSearch
.