2015-06-01 3 views
0

Я использую ExtJS 4.1. В пользовательском интерфейсе у меня две кнопки - btnOne & btnTwo. У меня есть магазин, который я загружаю после нажатия на обе кнопки.Добавление функции обратного вызова в хранилище ExtJs на основе определенного условия

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

Я посмотрел на метод загрузки store load docs &, позволяющий использовать функцию обратного вызова.

store.load({ 
    scope: this, 
    callback: function(records, operation, success) { 
     // the operation object 
     // contains all of the details of the load operation 
     console.log(records); 
    } 
}); 

Если область обратного вызова не нужно устанавливать, функция просто можно передать:

store.load(function(records, operation, success) { 
    console.log('loaded records'); 
}); 

Но в моем случае функция обратного вызова вызывался до магазина нагрузки.

Я не хочу поддерживать переменную для нее.

Просьба предложить.

ответ

0

Идея с глобальной переменной правильная, просто вы не должны делать переменную глобальной, но локальной (для вашего контроллера). Таким образом, в вашем контроллере добавить два внутренних состояния для каждого нажатия кнопки, и в обратном вызове на магазин нагрузке проверить эти состояния:

//in your controller: 
var ctrl = this;//ctrl == this == controller 
store.on('load', function() { 
    if (ctrl.firstButtonClicked && ctrl.secondButtonClicked) { 
     mySecondCallback(withArguments); 
    } 
}) 
+0

Есть ли способ достичь этого без сохранения varibales? – SharpCoder

+0

Нет: кнопка не имеет состояния, поэтому вам нужно будет поддерживать состояние где-то в переменных. Но вы можете сохранить эти переменные в самой кнопке: 'button. [Prefix] Clicked = true' (измените префикс, чтобы убедиться, что вы не испортили внутренние переменные среды Ext). В качестве альтернативы вы можете использовать некоторые флажки, которые нельзя отменить, если они были выбраны. –

0

Определил ваш обратный вызов, говорит onStoreLoad(), на уровне контроллера, и еще одна функции с параметром (указателем функции обратного вызова) специально для загрузки хранилища.

onStoreLoadComplete: function() {} 

loadStore: function(callback) { 
     store.load({callback: callback}); 
} 

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

onFirstButtonClick: function(){ 
     this.loadStore(this.callback); 
    } 

    onSecondButtonClick: function(){ 
     this.loadStore(); 
    } 
Смежные вопросы