0

面对ExtJS工作中的一个问题
有这样一段代码——一个新的类(view

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 中获取文本字段的值

如何访问元素来获取它们的值​​​​

在此先感谢并为我笨拙的英语道歉

4

1 回答 1

1

问题是通过在 searchTree() 中使用 Ext.widget(...),您正在创建该类的一个新实例(一定要检查文档),而不是获取已经存在的组件的实例。

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

所以有几点建议:

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

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

    var ctr = btn.up("elemcontainer")

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

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

于 2013-10-20T14:55:44.733 回答