我无法获得extJS中文本字段的值

时间:2013-10-20 13:59:10

标签: extjs-mvc extjs4.2

面对ExtJS的工作问题 有这样的代码 - 一个新类(视图

Ext.define('FormApp.view.ElementContainer', {
extend: 'Ext.Container',
alias: 'widget.elemcontainer',

initComponent: function() {
    this.items = [{
            layout: {
                type: 'hbox',
                align: 'middle'
            },

            items: [
                { xtype: 'component',
                  html: '&nbspПоиск&nbsp&nbsp'},

                { xtype: 'textfield',
                  width: 495,
                  name: 'search'
                 },

                { xtype:'component',
                  html:'&nbsp&nbsp'},

                { xtype: 'button',
                  text: 'Найти',
                  width: 80,
                  action: 'searchTreeData'}
                ]}
    ];

    this.callParent();
}
});  

然后在控制器中我编写这样的代码来获取文本字段的值

Ext.define('FormApp.controller.ControlOne', {
extend: 'Ext.app.Controller',

views: ['ElementContainer', 'TreeView'],

init: function() {
    this.control({
        'elemcontainer button[action=searchTreeData]': {
            click: this.searchTree
        },
        'elemcontainer textfield[name=search]':{change: this.str}
    });
},

searchTree: function(searchStr) {
    var dat = Ext.widget('elemcontainer');

    var str = dat.down('textfield').getValue();

    alert (str.getValue());
    },

str: function()
{alert('OK');}
});  

我无法获取extJS

中文本字段的值

如何访问元素以获取其值?

提前致谢并抱歉我的笨拙英语

1 个答案:

答案 0 :(得分:1)

问题在于,通过在searchTree()中使用Ext.widget(...),您将创建该类的新实例(确保check the docs),而不是获取组件的实例已经存在。

另一个问题是str已经是文本字段的“值”,因此在str.getValue()上调用getValue()也不会让你走得太远。

所以提出一些建议:

  1. 更新searchTree方法以传递正确的参数。由于此方法是在按钮的click事件上调用的,因此参数将是Ext.button.Button单击事件的参数:searchTree(btn,e,opts){...}

  2. 一旦将正确的参数传递给searchTree(),就可以使用组件选择器方法获取容器的现有实例。例如,由于按钮已经是容器的后代,因此您可以执行以下操作以获取组件的正确实例:

    var ctr = btn.up(“elemcontainer”)

    现在您拥有了正确的容器实例,您可以再次使用其中一个组件选择器方法来查找文本字段:

    var str = ctr.down('textfield')。getValue()