簡體   English   中英

如何從控制器更改extjs組合框的“ valueField”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM