/ * Решили изменить подход;написал следующий код
вызов моего автозаполнения для текстового поля * /
$('#textbox').txtAc({url:txtUrl});
// Вызов автозаполнения из обратного вызова в jqgrid
dataInit:function(elem){
var gridArray;
var gridAc = $.getMyGridAc();
gridArray = gridAc.getStoredArray();
elem.autocomplete({source:gridArray});
};
// Среди плагинов/ функции:
(function($){
$.myAc = function(options){
var storedArray = [];
$.fillStoredArray = function(){
$.ajax({url:options.url,
...,
success:function(msg){
storedArray = msg.d;
if(options.el){
options.el.autocomplete({source:storedArray}); //1st time called, call jquery ui autocomplete from the ajax call if the element was specified (textbox); grid cant specify element in advance
}
}
});
}
return {
getStoredArray :function(){
if (storedArray.length === 0){
$.fillStoredArray();
}
return storedArray;
}
}
}
})(jQuery);
/ * Теперь я могу начать повторно использовать мой плагин - ниже для вызова jqgrid, затем для обычного текстового поля jqgrid, автоматически завершенного:
для jqgrid, 1-йсоздать и вернуть экземпляр замыкания из $ .myAc:
* /
(function($){
$.prepareGridForAc = function(){
var myGridAc = $.myAc({url:gridUrl});
return function getMyGridAc (){
return myGridAc;
}
}
})(jQuery);
// когда пользователь загружает сетку в первый раз (или активирует вкладку, на которой эта сетка включена) - вызовом prepareGridForAc
//
$.prepareGridforAc();
//
// текстовое поле, автозаполнение:
(function($){
$.fn.txtAc = function(options){
var myTxtAc ;
var acArray;
$.extend(options,el:this);
myTxtAc = $.myAc(options);
acArray = myTxtAc.getStoredArray();
return this.autocomplete({source:acArray});
}
})(jQuery);