2012-02-29 15 views
1

私はストアを作成してロードしています。しかし、first()メソッドを使用して最初のモデルインスタンスからレコードを取得しようとすると、失敗します。ExtJS 4、ストアの読み込みですが、store.first()メソッドは未定義のまま返します

は、ここでは、コードです:

 var getCaseId = function(){ 
      var csId;  
      //form url 
      var getCaseIdStore = Ext.create('Roa.store.district.Requests', { 

      model: 'Roa.model.district.Requests', 
      proxy: { 
        type: 'ajax', 
        url : 'http://localhost:8080/roa/MongoDataService/requests?etc', 
        method: 'GET', 

        reader: { 
          type: 'json', 
          root: 'requests' 
        } 
      }, 
      autoLoad: true 
    });//end create store 

        console.log('request store created'); 

    getCaseIdStore.load({ 
    scope: this, 
    callback: function(records,operation,success){ 

      if(success){ 

        //var req = getCaseIdStore.first(); 
        //var csId = req.get('caseId'); 
        //console.log('csId==>'+csId); 

        //return csId; 

      }//end if 

    }//end callback 

    });//end store load 


    var req = getCaseIdStore.first(); 

    if (req != undefined){ 
    csId = req.get('caseId'); 

    console.log('return csId==>'+csId); 

    return csId;  
    }    
    else{   
    console.log('your attempt failed'); 
    }    

    };//end function 

は良い人々に助言してください。

-TU

答えて

3

ローディングプロセスは非同期です。最初のレコードを取得しようとするだけではいけません。あなたの.first()呼び出しをコメントアウトされた行にあるようにストアロードコールバックに移動することはできません。これらの行はうまくいくはずです。

+0

。最初のコールバックコールバックは問題ありません。 – sha

+0

はい、動作します。しかし、私は、コールバックからcsId値を取得する方法を理解することが困難なため、包括関数getCaseId()によって返されます。 –

+0

することはできません...あなたは同期関数として関数を包含することを考えようとしていますが、ロード操作を開始した直後にその関数から制御を取り戻します。すぐに結果に依存しないようにこの関数を呼び出すビットコードを再設計する必要があります。 – sha

1

暗いところでは巨大なショットですが、負荷範囲が「これ」の場合、getCaseIdStoreがない可能性がありますか?おそらく、コールバック内のgetCaseIdStoreを 'this'に置き換えますか?

+0

私は、コメントされた行が失敗した行(ロード内)であると仮定して答えました。コメントされていない行が失敗した行なら、shaの返答を見てください。 – Izhaki

+0

コメントはありません。私はstore.load()メソッドの外で戻り値にアクセスする方法を理解しようと努力しています - csId - 。 –

0

getCaseIdStore.isLoading()メソッドを使用して、ストアがロード操作を終了したときを確認できます。あなたは.first()呼び出しを続けることができます。