Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2013, 07:14
Интересующийся
Отправить личное сообщение для DmitryK1 Посмотреть профиль Найти все сообщения от DmitryK1
 
Регистрация: 20.04.2012
Сообщений: 14

Переопределение родительской функции в $.widget
Пробую написать плагин, который расширяет стандартный автокомплит: я получаю на странице JSON с айдишниками элементов, и айдишниками значений. Потом в цикле вызываю эти элементы, проставляя всем Айди значения.

//вместо цикла, для примера
var elem="#stat";
var data[elem]=10 ;
$(elem).idautocomplete("id",data[elem]);


Каждый элемент сам идёт на сервер и получает текстовое значение этого айдишника, которое уже и отображает.

Однако возникает необходимость потом собрать значения айдишников с каждого элемента(потому как их могли поменять)

крайне неудобно для каждого элемента прописывать колбэк и в нём присваивать айдишник какой-то переменной, а потом из этой переменной этот айдишник брать.

$("#login").autocomplete({
                source: "/test.aspx",
                select: function (event, ui) {
                    cur_employee = ui.item ? ui.item.id : "null";
                }
            });


В общем я не придумал ничего лучше как попробовать переопределить select и сохранять эти данные в самом моём плагине.

Однако я столкнулся с проблемой, что когда я захожу в sel в плагине, я не вижу никаких переменных своего плагина. И такое ощущение, что я нахожусь в этот момент в родительском ui.autocomplete

Подскажите пожалуйста, как можно решить такую проблему или каким другим способом можно решить всю задачу получения ранее изменённых значений из плагина. Не в момент изменения, а позже.

Вот код проблемного плагина.
; (function ($, window, document, undefined) {

$.widget("my.idautocomplete", $.ui.autocomplete, {
    
    // дополнительные настройки зададим позже
    options: {
            oldselect:{},
            id:""
    },
    _selected_item:{
    },
    // конструктор плагина.
    _create: function () {
        // вызовем в нем конструктор родительского плагина
        $.ui.autocomplete.prototype._create.call(this);
        this.options.oldselect=this.options.select;
        this.options.select=this.sel;
    },

    // деструктор плагина
    destroy: function () {
        // вызовем в нем деструктор родительского плагина
        $.ui.autocomplete.prototype.destroy.call(this);
    },
    sel:function (event, ui) {
        console.log("sel");
        
        if(this.options!==undefined ){

?// сюда не заходим и this.options.id не видим
            this.options.id=ui.item.id;
            if( proto(this.options.oldselect)=="function"){
                this.options.oldselect.apply(event, ui);
        }
        }
    },
    // обработка изменения свойств
    _setOption: function () {
        $.ui.autocomplete.prototype._setOption.apply(this, arguments);
    },
    id: function (ui){
        if (ui!==undefined) {
            console.log("Setting Val: " + ui);
            var IDAC=this;
            $.get(IDAC.options.source ,{id:ui},
                function (ret) {

// то что возвращается: [{"id":"10","label":"Ленинская","value":"Ленинская"}]
                    var json = JSON.parse(ret);
                    if (json) {
                              $(IDAC.element[0]).val(json[0].label);
                                IDAC.options.id=ui;
                              }
                               });
        }
?// соответственно тут всё время старое значение
     return this.options.id ? this.options.id : "null";
    }

});


})(jQuery, window, document);


вот так инициализируется плагин:
$("#stat").idautocomplete({
                source: "/test.aspx",
                minLength: 0
            });

<input id="stat"/>
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переопределение переменной в функции tsigel Общие вопросы Javascript 5 06.09.2013 18:26
userjs переопределение текста функции qnx Opera, Safari и др. 2 16.10.2012 14:23
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03