2012-08-28 32 views
0

我的窗體上有組合框存在問題。 問題是,當我加載表單數據(與form.loadRecord有時組合框是空的,即使我知道該模型有數據。ExtJs組合框存儲裝載和表單

當我查看Firebug時,可以看到組合框存儲在加載記錄後加載。我認爲這是其原因 - 組合框存儲在稍後加載,然後記錄被加載。

這是我如何設置組合框專賣店:

//All stores have autoload:true configuration. 
    var possessionGroundsStore = Ext.create('path.to.store'); 
    var vehicleTypesStore = Ext.create('path.to.store'); 
    var usePurposesStore = Ext.create('path.to.store'); 
    this.editView = Ext.create('path.to.view'); 
    this.editView.getPossessionGroundsField().store = possessionGroundsStore; 
    this.editView.getVehicleTypeIdComboBox().store = vehicleTypesStore; 
    this.editView.getUsePurposeField().store = usePurposesStore; 

    //later 
    this.editView.loadRecord(record); 

有沒有辦法解決這個問題的常用方法?

我現在看到的唯一方法是在每個組合框 中使用store.load回調,然後在加載所有商店後執行loadRecord,但看起來很複雜。

任何幫助?

UPDATE:form.loadRecord把它叫做內部調用field.setValue()。 所以,重點是:在調用setValue之前,組合框必須被填充。 如果商店沒有加載,您將看到valueField而不是displayField

+0

Try with triggerAction:'all'for combobox property – AJJ

回答

5

默認配置組合框將在創建後第一次展開時觸發存儲加載。

這會發生在任何組合框上,除非你給它一個queryMode: 'local'配置。換句話說,默認的組合框配置幾乎總是在組件創建完成後加載它的商店。出於這個原因,我覺得你的組合很難被裝得太晚,也許他們裝得太早了autoLoad: true

但是,我不會遇到同樣的問題,因爲你有我通常使用queryMode: 'local'設置我的組合框,並在應用程序初始化階段爲它們預先加載商店。我這樣做是因爲我的組合商店通常都是可以在我的應用程序的許多不同視圖中使用的參考商店。當我創建組合組件時,我不會重新創建商店,我只需使用Ext.getStore('ComboStoreId')就可以查看已存在並加載的參考存儲。你可以嘗試設置你的應用程序。

如果你不想做,你也可以嘗試從您的組合商店移除autoLoad: true配置,然後調用yourComboStore.load()你叫loadRecord後。

+0

謝謝,我試過你的方法(第二個),但沒有運氣。查看我的更新。 – mik