我对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?

我已经访问过this链接。但是,它并没有太大帮助

最佳答案

我认为更改组合的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

关于javascript - 如何从 Controller 更改extjs组合框的“valueField”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28987568/

10-12 13:50