2015-04-08 5 views
4

Я новичок в ExtJs, и я изо всех сил пытаюсь понять, как использовать функции обратного вызова в ExtJs. Версия ExtJs я использую 4.2.1 В основном я хочу цепи выполнение 2-х функций:Функции обратного вызова ExtJS Пример

func1: функция() {}

func2: функция() {}

, так что func2() запускается только после завершения func1().

Из того, что я прочитал до сих пор, мне нужно использовать функцию обратного вызова, но для жизни я не могу ее получить.

Вот мой код:

filter: function (filters, value) { 

    if (Ext.isString(filters)) { 
     filters = { 
      property: filters, 
      value: value 
     }; 
    } 

    var me = this, 
     decoded = me.decodeFilters(filters), 
     i = 0, 
     length = decoded.length; 

    for (; i < length; i++) { 
     me.filters.replace(decoded[i]); 
    } 

    Ext.Array.each(me.filters.items, function (filter) { 
     Ext.Object.each(me.tree.nodeHash, function (key, node) { 
      if (filter.filterFn) { 
       if (!filter.filterFn(node)) node.remove(); 
      } else { 
       if (node.data[filter.property] != filter.value) node.remove(); 
      } 
     }); 
    }); 
    me.hasFilter = true; 

    console.log(me); 
}, 

clearFilter: function() { 
    var me = this; 
    me.filters.clear(); 
    me.hasFilter = false; 
    me.load(); 
}, 

isFiltered: function() { 
    return this.hasFilter; 
}, 


filterNavAdminSTByUserName: function (nameValue) { 

    this.clearFilter(); 

    this.filter([{ 
     property: 'userName', 
     value: nameValue 
    }]); 

} 

Моя проблема заключается в том, что this.filter() получает выполняется перед this.clearFilter(); Как принудительно выполнить this.filter() только после этого. ClearArlter() завершает?

Заранее благодарен!

+0

Ваш вопрос немного расплывчатый. Является ли 'func1' асинхронным методом? –

+0

Вы не можете настроить метод как асинхронный. Я спрашиваю, делает ли 'func1' все, что асинхронно? Как правило, запрос ajax. –

+0

Я не знал, что вы можете установить метод асинхронный в ExtJs 4.2.1. Из того, что я знаю (ограниченные знания, как вы можете догадаться), все методы по умолчанию являются асинхронными. Как я могу это установить? И func1 & func2 должны быть синхронизированы? Или просто func1? – eb15

ответ

0

После некоторого поиска души я наконец понял, как работают функции обратного вызова. Так вот решение:

clearAndFilter: function (nameValue) { 
    var me = this; 
    me.filters.clear(); 
    me.hasFilter = false; 
    me.load({ 
     scope: me, 
     callback: function() { 
      // filter the store 
      me.filter('userName', nameValue); 
     } 

    }); 
}, 

filterNavAdminSTByUserName: function (nameValue) { 
    this.clearAndFilter(nameValue); 
} 

Чувствует себя хорошо, чтобы ответить на мой первый пост здесь!

+1

Предлагайте вам удалить это и обновить свой вопрос. –

Смежные вопросы