Как запустить событие после того, как кендо comboBox завершил фильтр

Мне нужно запустить событие после того, как мое поле со списком закончит свой фильтр

Я расширил виджет и попытался бросить .done в конце вызова.

    search: function(word) {
        word = typeof word === "string" ? word : this.text();
        var that = this,
            length = word.length,
            options = that.options,
            ignoreCase = options.ignoreCase,
            filter = options.filter,
            field = options.dataTextField;

        clearTimeout(that._typing);

        if (length >= options.minLength) {
            that._state = STATE_FILTER;
            if (filter === "none") {
                that._filter(word);
            } else {
                that._open = true;
                that._filterSource({
                    value: ignoreCase ? word.toLowerCase() : word,
                    field: field,
                    operator: filter,
                    ignoreCase: ignoreCase
                }); // .done here does not work :(
            }
        }
    },

Мне нужно знать, когда значение возвращается, чтобы я мог делать что-то еще на своей странице, когда я знаю, что ввод соответствует стороне сервера значения.

Может ли кто-нибудь придумать способ добиться этого? :)

Есть ли способ запустить событие после изменения источника данных?


person Spaceman    schedule 19.05.2014    source источник


Ответы (1)


Я решил проблему, используя состояние _busy в виджете. Следующий код находится в функции выбора виджета, поэтому всякий раз, когда кто-то теряет фокус, это срабатывает.

Если виджет не занят, он завершит вызов ajax. Надеюсь, это кому-нибудь пригодится :)

    if (data && data.length != 0) 
    {
        for (var i = 0; i < data.length; i++) 
        {
            li = $(that.ul).find('li:nth-child(' + (i + 1) + ')');
            if (li.length != 0 && data[i].ProductCode == that.input.val()) 
            {
                that._select(li);
                return;
            }
        }
    }
    if (that._busy && that._busy != null)
    {
        that.busyCheck = setInterval(function () {
            if (!that._busy || that._busy == null) {
                clearInterval(that.busyCheck);
                if (data && data.length != 0){
                    for (var i = 0; i < data.length; i++){
                        li = $(that.ul).find('li:nth-child(' + (i + 1) + ')');
                        if (li.length != 0 && data[i].ProductCode == that.input.val()){
                            that._select(li);
                            return;
                        }
                    }
                }
            }
        }, 50);
    } 
    that._AddcodeIsServerValid(false);
person Spaceman    schedule 29.05.2014