如何同步组合框和文本字段值。即如何从存储在文本字段中加载不同的值,而我正在更改组合框上的值

Posted

技术标签:

【中文标题】如何同步组合框和文本字段值。即如何从存储在文本字段中加载不同的值,而我正在更改组合框上的值【英文标题】:How to sync combobox and textfield value. i.e how to load different values from store on textfield,while I am changing values on combobox 【发布时间】:2012-07-31 06:26:02 【问题描述】:

我是 EXTjs 的新手(也是 *** 的新手)。我一直在努力解决这个问题,最后决定寻求帮助。我的问题是“如何同步组合框和文本字段的值。即如何从文本字段的“存储”加载不同的值,而我正在更改组合框的值?“我的问题是,当我在组合框上加载值并选择它们时,我的文本字段一直为空。我试过“Ext.getCmp().setValue();”它适用于此,但我认为如果我有 100 个文本字段,这不是最佳选择。我希望组合框和文本字段以某种方式与商店同步。任何帮助表示赞赏。图片中的情况在下面的链接中:

pic one

pic two

还有我的代码:

我的 app.js:

Ext.Loader.setConfig(
    enabled: true
);
Ext.application(

    name: 'work',

    appFolder: 'app',


    controllers: ['Work'],



    launch: function() 


        Ext.create('Ext.container.Viewport', 
            //layout: 'fit',
            items: [
                xtype: 'rightpanel' // gets it from view class
            

            ]

        );
    
);

我的观点 RightPanel:

Ext.define('work.view.works.RightPanel', 
    extend: 'Ext.panel.Panel',
    ALIAS: 'widget.rightpanel',
    width: 300,
    title: 'Building navigation',
    animCollapse: true,
    collapsible: true,
    split: true,
    minSize: 400,
    maxSize: 400,
    margins: '0 5 0 0',
    //activeTab:1, tabPosition:'bottom',
    initComponent: function() 
        this.items = [
            xtype: 'form',
            items: [
                xtype: 'combobox',
                fieldLabel: 'BuildingID',
                queryMode: 'local',
                name: 'Bid',
                displayField: 'Bid',
                valueField: 'Bid',
                id: 'Bid',
                MODE: 'remote',
                store: 'Work'
            , 
                xtype: 'textfield',
                fieldLabel: 'Address',
                name: 'Address',
                displayField: 'Address',
                valueField: 'Address',
                id: 'Address',
                store: 'Work'
            ]
        ];

        this.columns = [
            header: 'ID',
            dataIndex: 'Bid',
            flex: 1
        , 
            header: 'Texts',
            dataIndex: 'Address',
            flex: 1
        ];

        this.callParent(arguments);

    
);

我的商店:

Ext.define('work.store.Work', 
    extend: 'Ext.data.Store',

    model: 'work.model.Work',
    storeId: 'workstore',
    id: 'workstore',
    autoLoad: true,

    proxy: 
        type: 'ajax',
        limitParam: undefined,
        startParam: undefined,
        paramName: undefined,
        pageParam: undefined,
        noCache: false,

        api: 
            read: 'data/showWork.php' // just a .php file that reads values from database and shows them on combobox
        ,

        reader: 
            type: 'json',
            root: 'data',
            successProperty: 'success'
        ,

        writer: 
            type: 'json',
            root: 'data',
            encode: true
        

    
);

我的模型类:

Ext.define('work.model.Work', 
    extend: 'Ext.data.Model',
    //idProperty: 'WorkID',   
    fields: [
        name: 'Bid',
        type: 'int'
    , 'Address']
);

我的控制器:

 Ext.define('work.controller.Work', 
   extend: 'Ext.app.Controller',

   stores: ['Work'],
   models: ['Work'],

   views: [
       'works.RightPanel' // name comes from view class
   ],

   init: function() 
       console.log('Done');
       this.control(
           'viewport > rightpanel': 
               render: this.test
           ,
           'rightpanel combobox[id=Bid]': 
               select: this.change
           
       );
   ,

   change: function(buttons) 
       var values = this.getStore('Work').collect('Address', 'Address', false);
       var win = buttons.up('rightpanel'); //  gets the needed widget
       var form = win.down('combobox'); // gets the needed form
       var value = form.getValue(); // gets the value
       console.log("value " + value);
   
);

【问题讨论】:

【参考方案1】:

您想观察组合框上的更改,然后根据其新值执行更改。

this.items = [
    xtype: 'form',
    items: [
        xtype: 'combobox',
        fieldLabel: 'BuildingID',
        queryMode: 'local',
        name: 'Bid',
        displayField: 'Bid',
        valueField: 'Bid',
        id: 'Bid',
        mode: 'remote',
        store: 'Work'
        listeners::
            change:function(cbx, newVal,oldVal,e)
                var record  = cbx.getStore().find("Bid",newVal); // theres prolly a better way to find this, such as to find the active record of the cbx
                Ext.getCmp('Address').setValue(record.getValue("Address"))

            

        

    ,
        xtype: 'textfield',
        fieldLabel: 'Address',
        name: 'Address',
        displayField: 'Address',
        valueField: 'Address',
        id: 'Address',
        store: 'Work'
    ]

【讨论】:

以上是关于如何同步组合框和文本字段值。即如何从存储在文本字段中加载不同的值,而我正在更改组合框上的值的主要内容,如果未能解决你的问题,请参考以下文章

如何将组合框与文本框连接起来?

AS3/Flash:组合框和文本输入交互

PHP - 将文本字段值与数组进行比较?

Visual C++ 表单、简单消息框和将文本从文本字段分配给字符串时出错

如何使用带有标签的目标 c 从文本字段访问文本值?

访问 VBA - 使用组合框(多值字段)时类型不匹配