2016-09-24 103 views
0

所以我有以下代碼:從ExtJS中的商店訪問數據?

的型號:

Ext.define('Sandbox.model.User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'Name', type: 'string' }, 
     { name: 'Email', type: 'string' }, 
     { name: 'TelNumber', type: 'string' }, 
     { name: 'Role', type: 'string' } 
    ] 
}); 

的商店

Ext.define("Sandbox.store.Users", { 
    extend : 'Ext.data.Store', 
    model : 'Sandbox.model.User' 
}); 

而且我有以下的application.js它加載數據到該商店:

Ext.define('Sandbox.Application', { 
    extend: 'Ext.app.Application', 

    name: 'Sandbox', 

    stores: [ 
     'Users' 
    ], 

    launch: function() { 

     var userStore = Ext.getStore('Users'); 
     userStore.add(
      [ 
       { 
        Name : 'John', 
        Email: '[email protected]', 
        TelNumber : ' 0330 122 2800', 
        Role : 'Administrator' 
       }, 
       { 
        Name : 'Sarah', 
        Email : '[email protected]', 
        TelNumber: ' 0330 122 2800', 
        Role : 'Customer' 
       }, 
       { 
        Name : 'Brian', 
        Email : '[email protected]', 
        TelNumber: ' 0330 122 2800', 
        Role : 'Supplier' 
       }, 
       { 
        Name : 'Karen', 
        Email : '[email protected]', 
        TelNumber: ' 0330 122 2800', 
        Role : 'Administrator' 
       } 
      ] 
     ); 

     var userStore = Ext.getStore('Users'); 
     console.log("Store size " + userStore.getCount()); 

     console.log("Person #1: " + userStore.getAt(0).Name); 
    } 
}); 

當應用程序啓動時,正確商店大小(4)已記錄。但是索引爲0的特定數據的第二個日誌返回未定義的值。我明白ExtJS是異步的,但數據是硬編碼的;爲什麼會延遲將數據加載到商店?我如何修復這段代碼,以便當我第一次導航到瀏覽器上的應用程序時,上面的兩個日誌顯示正確的信息?

回答

2

您無法直接訪問該屬性。你應該使用:

userStore.getAt(0).get("Name") 

編輯:你的代碼中沒有其他錯誤,問題只是語法。 「ExtJS是異步的」是一個很大的誤解,因爲它只是一個js庫,它不能是異步的。你編碼的方式可以是,你不用你的例子。您手動將數據添加到您的商店。