从 json 对象中提取字符串

extract string from a json object

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

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

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

我已经尝试了以下但它不起作用:

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 中的数据加载文本字段中的值。

编辑: 添加了更多信息。

您的 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'
        }]
    });

}
});