2016-03-27 16 views
1

変数 'updated'の値は、以下のコードでコールバック内から変更することはできますか?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

'store.load()'(私はリモートプロキシを使用していると仮定しています)は非同期呼び出しで、 'update'変数を定義して' load'を呼び出して 'update'を返すので毎回falseを返すと思います。変数。したがって、ストアはまだロードされておらず、 'update'はまだfalseです。 –

+0

@SergeyNovikovはい、あなたは正しいです、私はリモートプロキシを使用しています –

+0

さて、私はどのようにurコードサンプルが実際に動作するかを説明しました。 'updated'変数はtrueに変更されますが、' callback'関数が起動されると変更されます。 –

答えて

1

正確には、コードのこの部分では達成したいのですが、store.load()が非同期であるため、あなたはとてもそのまだ偽updatedを返したときにストアがロードされていない(私はあなたがアヤックスのようなリモートプロキシを使用することを想定)わかりません。ストアは、あなたがcallback匿名関数の中でそれを行うことができますロードされたときにあなただけの何かをしたい場合は

(またはあなたのupdateData関数にコールバック関数を渡し、callback以内にそれを呼び出します?)。

を確認したい場合は、ストアがロードされているか、いない場合は、ExtJSのためisLoaded()を呼び出す5+またはストアlastOptionsプロパティをチェックすることができる(つまり、その後、存在する場合は、あなたの店が少なくとも一度ロードされた)ExtJSの4

のプロパティ

私は表示されません適切なあなたのupdateData関数のソリューションはtrueを返します。

関連する問題