2011-12-03 10 views
4

最初にext js 4とスタックする。私はストアを使用してアプリケーションを起動するときに現在のユーザーデータを取得しようとしています。しかし、私はストアからデータを取得していないので、store.countも0を返します。 ストアの作成方法はたくさんありますが、データのアクセス方法はわかりません。
マイモデル extjsからデータを得る方法4 store

..私は内線のAJAXリクエストを使用してデータを取得するために管理し、しかし、私は店を使用して、より良いことだと思うし、私はそれらを避けるカント:

Ext.define('MyApp.store.User.CurrentUser', { 
    extend: 'Ext.data.Store', 
    requires: 'MyApp.model.User', 
    model: 'MyApp.model.User', 
    autoLoad: true, 

    proxy: { 
     type: 'ajax', 
     method: 'POST', 
     url: Routing.generate('admin_profile'), 
     reader: { 
      type: 'json', 
      root: 'user' 
     } 
    } 
}); 

Ext.define('MyApp.model.User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     'id', 
     'username', 
     'email' 
    ] 
}); 

私の店のように見えます

返されたJSON:

{ 
    "success":true, 
    "user":[{ 
     "id":1, 
     "username":"r00t", 
     "email":"[email protected]" 
    }] 
} 

とアプリケーション:

Ext.application({ 
    name: 'MyApp', 
    appFolder: '/bundles/myadmin/js/app', 
    models: ['MyApp.model.User'],  
    stores: ['MyApp.store.User.CurrentUser'], 
    //autoCreateViewport: true, 
    launch: function() { 
     var currentUser=Ext.create('MyApp.store.User.CurrentUser',{}); 

     /* 
     Ext.Ajax.request({ 
      url : Routing.generate('admin_profile'), 
      method: 'POST', 
      success: function(resp) { 
       var options = Ext.decode(resp.responseText).user; 

       Ext.each(options, function(op) { 
        var user = Ext.create('MyApp.model.User',{id: op.id,username:op.username,email:op.email}); 
        setUser(user); 
       } 
      )} 
     }); 
     */ 

     currentUser.load(); 
     alert(currentUser.count()); 
    } 
}); 

答えて

5

問題は、ストアにデータが含まれていないということではなく、ストアの負荷が非同期であるという問題があるため、ストアレコードを数えたときにストアが実際に空です。 これを '修正'するには、ストアロードのコールバックメソッドを使用します。 model.load()メソッドはレコードをロードするには「ID」を使用するように見えるんが、あなたのモデルにidPropertyを定義した場合

currentUser.load({ 
    scope : this, 
    callback: function(records, operation, success) { 
     //here the store has been loaded so you can use what functions you like 
     currentUser.count(); 
    } 
}); 
0

すべてのsenchaの例では、ストアにプロキシがありますが、実際にはmodel.loadメソッドを使用できるように、プロキシをモデルに配置する必要があります。ストアはモデルのプロキシを継承し、すべて正常に動作します。

(idPropertyを使用する代わりに)model.loadがidをハードコードしているように見えますが、私が知る限り、常にintでなければなりません。

幸運!

+0

、私はそれが代わりに使用されますことを、信じている(このかかわらをテストしていません) – dougajmcdonald

関連する問題