从json对象中提取字符串

时间:2015-05-06 08:37:59

标签: json extjs textfield jsonobject

我在extjs代码中有一个属性定义为:

datajson: { 
    'name' : 'Hello',
     ....
}

现在我需要将textfield的值设置为此属性中定义的名称。

我尝试过以下但是没有效果:

Ext.getCmp('name').setValue((this.datajson.xyz.name).toString());

我想要设置其值的文本字段的ID是“name”

这是完整的代码结构。

    Ext.define('Test', {
        extend : 'Ext.Container',

        alias : 'widget.myapp',

        datajson:{
                'xyz' : {
                    ...
                    "name" : 'Hello',
                    ...
                }
             },


        initComponent : function() {

            this.appcombo = Ext.create('Ext.form.field.ComboBox', {
                            store: Ext.create('Ext.data.Store', { 
                                   fields: ['text'], 
                                   data: [ 
                                        {text: "a"}, 
                                        {text: "b"}, 
                                        {text: "c"}
                                    ] 
                                }),
                                listeners: {
                                    select: function(combo, record, index) {
                                        Ext.getCmp('name').setValue((this.datajson.xyz.name).toString());
                                    }
                                }
                            });

           ...
           ...

           //Here we have a textfield within a Panel whose id is 'name'

所以基本上我正在加载页面然后在组合框中选择一个值作为事件来加载文本字段中的值和datajson中的数据。

编辑:添加了更多信息。

1 个答案:

答案 0 :(得分:1)

您的select函数中的范围不再包含datajson。要继续使用this.datajson,您可以使用bind

将所需范围传递到函数中
Ext.application({
name: 'Fiddle',

datajson: {
    'name': 'Hello'
},

displayName: function (combo, record, index) {
    Ext.getCmp('name').setValue((this.datajson.name));
},

launch: function () {
    Ext.create('Ext.form.Panel', {
        title: 'Contact Info',
        width: 300,
        bodyPadding: 10,
        renderTo: Ext.getBody(),
        items: [{
            xtype: 'combo',
            store: Ext.create('Ext.data.Store', {
                fields: ['text'],
                data: [{
                    text: "a"
                }, {
                    text: "b"
                }, {
                    text: "c"
                }]
            }),
            listeners: {
                select: this.displayName.bind(this)
            }
        }, {
            xtype: 'textfield',
            id: 'name',
            fieldLabel: 'Name'
        }]
    });

}
});