在不使用Ext.getCmp的情况下获取复选框值

时间:2013-03-01 18:28:51

标签: javascript scope extjs4.1

我正试图获得此复选框的价值

 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();

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

2 个答案:

答案 0 :(得分:1)

一种解决方案可能是:

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

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

答案 1 :(得分:1)

我假设您担心因过度使用组件查询而导致性能下降。最小化组件查询的一个很好的技巧可能是在闭包内定义一个新方法,以便缓存第一个getCmp调用的结果。在闭包内包装方法的定义允许避免使用全局作用域或无用的类属性。

getMyCmp: function (cmp) { 
    // "cmp" does not exist outside this function
    return function () { 
        return cmp = cmp || Ext.getCmp('#myCmp'); 
    }; 
}()