0

大家好,当我使用 ExtJS 4.1 时,我经常遇到一个问题:每次我必须建立对对象的引用时,我都会付出很多努力,而且当我调用对象上的方法时,我经常会收到错误像这样:

未捕获的类型错误:无法调用未定义的方法“销毁”

例如,考虑以下情况,其中我有一个包含两个项目的字段集:一个字段容器和一个按钮。我的目的是为按钮编写一个适当的处理函数,这样当我点击按钮时,字段容器将被销毁。为此,我需要建立对 fieldcontainer 的正确引用。

这是我的代码:

xtype: 'fieldset',
id: 'product_fieldset',
title: 'Prodotti tempi e quantita',
defaultType: 'textfield',
layout: 'anchor',
items: [{
    xtype: 'fieldcontainer',
    layout: 'hbox',
    defaultType: 'textfield',
    defaults: {
        labelAlign: 'top'
    },
    items: [{
        xtype: 'combo',
        name: 'product',
    fieldLabel: 'Product',
    forceSelection: true,
    editable: false,
    store: products,
    queryMode: 'local',
    displayField: 'name',
    valueField: 'name',
    allowBlank: false,
    afterLabelTextTpl: required
    },{
        xtype: 'numberfield',
    name: 'p_on_weight', 
    fieldLabel: '% on weight',
    value: 0,
    minValue: 0,
    allowBlank: false,
    afterLabelTextTpl: required,
    hideTrigger: true,
    keyNavEnabled: false,
    mouseWheelEnabled: false
    },{
    xtype: 'numberfield',
    name: 'time', 
    fieldLabel: 'Time (minutes)',
    value: 0,
    minValue: 0,
    allowBlank: false,
    afterLabelTextTpl: required,
    hideTrigger: true,
    keyNavEnabled: false,
    mouseWheelEnabled: false
    },{
    xtype: 'numberfield',
    name: 'ph', 
    fieldLabel: 'Ph',
    minValue: 0,
    allowBlank: false,
    afterLabelTextTpl: required,
    hideTrigger: true,
    keyNavEnabled: false,
    mouseWheelEnabled: false
    },{
    xtype: 'textareafield',
    name: 'remarks',
    fieldLabel: 'Remarks'
}]
    },{
        xtype: 'button',
    text: 'Delete this product',
    handler: function() {
            proper_reference_to_fieldcontainer.destroy(); 
            //need help for previous line 
    }
    }]

好吧,任何人都可以建议我一种引用 fieldcontainer 的方法,可能不使用 fieldcontainer 的 id 吗?(Sencha 架构师建议不要使用 id 来建立引用)。

提前致谢。

恩里科。

4

2 回答 2

0

您可以将容器定义为独立对象:

var myFieldContainer = Ext.Create('Ext.form.FieldContainer', {
    layout: 'hbox',
    defaultType: 'textfield',
    defaults: {
        labelAlign: 'top'
    },
    items: [{
        xtype: 'combo',
(...)
    });

...然后在您的按钮配置中使用它:

{
    xtype: 'button',
    text: 'Delete this product',
    handler: function () {
        myFieldContainer.destroy();
    }
}
于 2012-08-08T20:43:43.987 回答
-1

使用首先为 fieldcontainer 定义一个 id 值,

xtype: 'fieldcontainer',
id: 'my_id',
layout: 'hbox',

现在用于Ext.getCmp('my_id')检索对它的引用。

于 2012-07-02T12:09:27.010 回答