[英]How to change “valueField” of extjs Combobox from controller
我對Extjs完全陌生,以下是我的應用程序結構的一部分
查看-包含組合框
xtype: 'combobox',
itemId: 'myCombo',
fieldLabel: 'myLabel',
queryMode: 'local',
store: Ext.create('Ext.data.ArrayStore', {
fields: [{
name: 'key1'
}, {
name: 'key2'
}],
storeId: 'myStore',
autoLoad: false
}),
displayField: 'key1',
valueField: 'key2',
控制器-包含對組合框的引用
Ext.define('MyApp.controller.myController', {
extend: 'Ext.app.Controller',
views: ['MyApp.view.MyView'],
refs: [{
ref: 'myComboRef',
selector: '#myCombo'
}],
this.control({
'#myCombo': {
change: this.getData
}),
.
.
.
getData: function(currFeild, newValue, oldValue, eOpts){
// I can get "valueField" of myCombo by
var valueFieldData = this.getMyComboRef().valueField;
// I want to change "valueField" to "key3"
// ????????
});
所以有人可以告訴我,如何為“ myCombo”設置新的valueField?
我已經訪問了此鏈接。 但是,它並沒有太大幫助
我認為更改組合的valueField
不是一個好的解決方案。 雖然我可以通過comob.valueField = 'newValueField';
例如在您的更改事件處理程序中。 盡管getValue()
fn僅在下次更改值時顯示新值字段的值。 所以我認為這不是一個好方法。
valueField
應該是用於標識商店中記錄的字段,通常不應更改。 如果需要訪問所選記錄的其他字段,則可以獲取商店的所選記錄,然后訪問所需的字段。
例如在您的更改事件處理程序中:
change: function(cmp, newValue){
var record = cmp.store.findRecord(cmp.valueField, newValue);
var field2Value = record.get('field2');
//do something with your field2Vlaue...
}
我也為您准備了一個小提琴,以便您可以在實際操作中看到此示例。 https://fiddle.sencha.com/#fiddle/jek
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.