0

皆さん、こんにちは。ExtJS 4.1 を使用していると、よくある問題に悩まされます。オブジェクトへの参照を確立する必要があるたびに多くの労力を費やしますが、オブジェクトのメソッドを呼び出すと、エラーが発生することがよくあります。このような:

キャッチされていない TypeError: 未定義のメソッド 'destroy' を呼び出せません

たとえば、フィールドコンテナとボタンの 2 つの項目を含むフィールドセットがある場合を考えてみましょう。私の目的は、ボタンの適切なハンドラー関数を作成して、ボタンを押すとフィールドコンテナーが破棄されるようにすることです。そのためには、フィールド コンテナへの正しい参照を確立する必要があります。

これが私のコードです:

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 の id を使用せずに、 fieldcontainer を参照する方法を誰かが提案できますか? (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 に答える