2010-11-18 42 views
13

我想知道如何更新或重新加載ExtJs ComboBox的列表值的方法。例如,我有一些複選框。這些複選框決定了ComboBox應具有的值。所以,選擇其中一些後,我點擊drowndown列表(組合框)查看值。更新或重新加載ExtJs ComboBox的商店

總之,如何更改ComboBox已有的值(存儲)。

希望有人能幫助我

感謝

+0

一些沒有解決的回答你的問題?請點擊複選標記接受最佳答案。 – Roberto 2014-04-22 16:17:50

回答

0

在上的複選框事件偵聽器,得到你的組合框從讀取存儲的引用。然後調用其添加或刪除功能來更新商店中的數據,具體取決於複選框的位置checked更新完成後,調用ComboBox組件上的doLayout(),它應根據商店的當前狀態重新呈現自身。

雖然我認爲有辦法讓它自動更新任何時間商店更新 - 我還沒有使用過。

+0

您是否認爲可以更新其中一個事件的組合框?例如,我想單擊組合框(向下箭頭),然後在顯示之前,函數將根據所選複選框獲取值。 – user512514 2010-11-18 20:29:12

+0

其實,我有一個帶有複選框的gridPanel。我從getSelections獲取的記錄中獲得一些值。我希望找到一種方法來執行此過程,而不是每次選擇一行時(或選中複選框)。這就是爲什麼我通過點擊組合框來實現它的想法。 – user512514 2010-11-18 20:38:53

+0

在調用父級的事件處理程序之前,在組合框的內部事件中完成它,絕對有可能擴展ComboBox對象並添加自己的js。至於gridPanel,在沒有代碼的情況下進行概念化有點困難。 – 2010-11-18 23:39:52

6

它去有點像這樣

{ 
    xtype: 'checkbox', 
    //configs 
    listeners : { 
    checked : function (checkbox, checkedBool) { 
     var yourCombo = Ext.getCmp(yourComboID); 

     //I'm not sure what params you will need to reload the comboBox from your 
     // service but hopfully this will give the jist of things. . . 

     yourCombo.store.reload(
        { 
        params: 
         {yourParam : checkedBool}, 
         {yourRowID : rowID} 
        }); 
     } 
} 
14
我一直在使用這種無證ExtJS的API函數來更改存儲在運行時

mycombobox.bindStore(newStore); 

http://www.sencha.com/forum/showthread.php?40749-Change-Combobox-store-data-update支持團隊說。

編輯:如果我希望把新的數據填充實體店的時候,我做這樣的事情

storeMyStore = new Ext.data.Store({ 
    ... 
    listeners: { 
     load: function(this, records, options) { 
      cbMyCombo.bindStore(storeMyStore); 
     } 
    } 
}); 
+0

實際上不是非常「無證」, http://docs.sencha.com/extjs/4.2.5/#!/api/Ext.form.field.ComboBox-method-bindStore 但爲我做了詭計,謝謝! – 2015-12-16 09:19:21

+0

呵呵,那是2011年無證的:) – Roberto 2016-09-21 18:05:40

2

我在這裏做一個選擇上的另一個組合框製成後更新的組合框。 基本上,最終用戶可以使用這兩個組合框來選擇一個主類別和一個子類別,這是基於第一個組合框的選擇。

這是第一個組合框中店:

Ext.define("StoreSubject", { 
extend: "Ext.data.Model", 
fields: [ 
{ 
    name: 'i_Id' 
}, 
{ 
    name: 's_Value' 
} 
] 
}); 

var StoreSubject = Ext.create('Ext.data.JsonStore', { 
model: 'StoreSubject', 
proxy: { 

    type: 'ajax', 
    url: '../General/AdministrationDefaultXMLDOM.aspx?qid=15', 
    reader: { 
     type: 'json' 
    } 
} 
}); 
StoreSubject.load(); 

這是第二個ComboBox中店:

Ext.define("StoreLanguageGroup", { 
extend: "Ext.data.Model", 
fields: [ 
{ 
    name: 'i_Id' 
}, 
{ 
    name: 's_Value' 
} 
] 
}); 
var StoreLanguageGroup = Ext.create('Ext.data.JsonStore', { 
model: 'StoreLanguageGroup', 
proxy: { 

    type: 'ajax', 
    url: '../General/AdministrationDefaultXMLDOM.aspx?qid=16', 
    reader: { 
     type: 'json' 
    } 
} 
}); 

我對Comobox代碼看起來是這樣的..

第一組合框:

var cmbSubjectName = Ext.create('Ext.form.field.ComboBox', { 
id: 'cmbSubjectName', 
fieldLabel: '<b>Subject</b>', 
name: 'cmbSubjectName', 
valueField: 's_Value', 
displayField: 's_Value', 
allowBlank: false, 
anchor: '80%', 
labelWidth: 150, 
emptyText: '[--Choose--]', 
minChars: 0, 
store: StoreSubject, 
queryMode: 'local', 
typeAhead: true, 
listeners: { 
    'select': { 
     fn: function (combo, value) { 
      var strSubjectName = Ext.getCmp('cmbSubjectName').getValue(); 
      Ext.getCmp('cmbLanguageType').clearValue(); 
      Ext.getCmp('cmbLanguageType').getStore().load({ 
       params: { 
        SubjectName: strSubjectName 
       } 
      }); 
     } 
    } 

}, 
}); 

該代碼用於調用和覆蓋COMBOX店(陽痿否則將繼續加載)

Ext.override(Ext.LoadMask, { 
onHide: function() { 
    this.callParent(); 
} 
}); 

// -------------------- -------

二組合框:

var cmbLanguageType = Ext.create('Ext.form.field.ComboBox', { 
id: 'cmbLanguageType', 
fieldLabel: '<b>Language</b>', 
multipleSelect: false, 
name: 'cmbLanguageType', 
valueField: 's_Value', 
displayField: 's_Value', 
allowBlank: false, 
anchor: '80%', 
labelWidth: 150, 
emptyText: '[--Choose--]', 
minChars: 0, 
store: StoreLanguageGroup, 
queryMode: 'local', 
typeAhead: true, 
}); 

希望這將幫助你..並請評價我的回答

+0

歡迎來到[so]!請參加[遊覽]。 – Unihedron 2014-11-20 11:39:35