0

我正在尝试获取此复选框的值

 Ext.define('myRoot.myExtApp.myForm', {
    extend: 'Ext.form.Panel',
    layout: {
      type: 'vbox',
      align: 'stretch'
    },
    scope: this,
    constructor: function() {
       this.callParent(arguments);

       this.myFieldSet = Ext.create('Ext.form.FieldSet', {
         scope: this,
         columnWidth: 0.5,
         collapsible: false,
         defaultType: 'textfield',
         layout: {
             type: 'hbox', align: 'stretch'
         }
       });

       this.mySecondForm = Ext.create('myRoot.myExtApp.myForm2', {
         scope: this,
         listener: this,
         margin: '1 3 0 0'
       });
       this.myCheckBox = Ext.create('Ext.form.Checkbox', {
           scope: this,
           //id: 'myCheckBox',
           boxLabel: 'Active',
           name: 'Active',
           checked: true,
           horizontal: true
       });

       this.myFieldSet.add(this.mySecondForm);
       this.myFieldSet.add(this.myCheckBox);

       this.add(this.myFieldSet);
     }
 });

如您所见,我有另一种形式

Ext.define('myRoot.myExtApp.myForm2', {

我有一个处理程序,它应该从“myForm”获取复选框的值

如何在不使用 Ext.getCmp 的情况下从 Form2 获取我的复选框的值?我知道我可以得到复选框的值,如果我这样做

Ext.getCmp('myCheckBox').getValue();

但使用

this.myCheckBox.getValue();

给我未定义的错误。

更新- 有了 Wared 的建议,我在 myForm2 中尝试了这个

this.temp=Ext.create('myRoot.myExtApp.myForm'), {});
var tempV = this.temp.myCheckBox.getValue();

我能够获得价值,但即使我取消选中该框,我也会获得相同的真实价值

4

2 回答 2

1

一种解决方案可能是:

myRoot.myExtApp.myForm.myCheckBox.getValue();

小心,错误的答案。请参阅下面的评论以获取有效的解决方案。

于 2013-03-05T13:00:31.340 回答
1

我假设您担心由于过度使用组件查询而导致性能损失。最小化组件查询的一个好技巧是在闭包内定义一个新方法,以缓存第一次getCmp调用的结果。将方法的定义包装在闭包中可以避免使用全局范围或无用的类属性。

getMyCmp: function (cmp) { 
    // "cmp" does not exist outside this function
    return function () { 
        return cmp = cmp || Ext.getCmp('#myCmp'); 
    }; 
}()
于 2013-03-12T09:38:19.523 回答