2016-03-27 7 views
1

Как значение переменной «обновлено», может быть изменено в коде ниже из обратного вызова.Невозможно изменить переменную из обратного вызова в ExtJs

Почему переменная 'updated' не изменяется в следующем порядке (то есть, она возвращает false при каждом вызове функции)?

updateData:function() 
{ 
    var updated = false; 
    var store = new Ext.getStore('MyStore'); 
    store.load({ 
     scope: this, 
     callback: function(records, operation, success) { 
     if(/*some condition*/){ 
      updated=true; 
      } 
     } 
    }); 

return updated ; 
} 
+0

Я полагаю, что эта функция возвращает false каждый раз, потому что 'store.load()' (я предполагаю, что вы используете удаленный прокси) является асинхронным вызовом, и вы просто определяете переменную 'update', вызываете' load' и возвращаете 'update' переменная. Таким образом, хранилище еще не загружено, а 'update' по-прежнему является ложным. –

+0

@SergeyNovikov yes you r right, я использую удаленный прокси –

+0

Ну, я описал, как образец кода ur действительно работает. переменная 'updated' изменена на true, но при запуске функции' callback'. –

ответ

1

Не уверен, что именно вы хотите достичь с помощью этой части коды, но так как store.load() асинхронных (я предполагаю, что вы используете удаленный прокси-сервер, как AJAX) магазин не загружаются, когда вы вернетесь updated поэтому его еще ложный.

Если вы хотите сделать что-то, когда магазин загружен вы можете сделать это в callback анонимной функции (или передать функцию обратного вызова для вашей updateData функции и вызвать его в callback?).

Если вы хотите проверить, загружен магазин или вы не можете позвонить isLoaded() для ExtJS 5+ или проверить магазин lastOptions имущества (если это существует, то ваш магазин загружен хотя бы один раз) недвижимость для ExtJS 4.

Я не вижу адекватных решений для вашей функции updateData возвращает true.