0

ExtJS の作業で問題に直面しました
そのようなコードがあります - 新しいクラス (ビュー)

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(...) を使用することで、既に存在するコンポーネントの を取得するのではなく、クラスの新しいインスタンスを作成していることです (必ずdocsを確認してください)。

もう 1 つの問題は、str が既にテキスト フィールドの「値」であるため、str.getValue() で getValue() を呼び出しても、あまり効果がないことです。

いくつかの提案:

  1. 正しい引数を渡すように searchTree メソッドを更新してください。このメソッドはボタンのクリック イベントで呼び出されるため、引数は Ext.button.Button のクリックイベントの引数になります: searchTree( btn, e, opts ) {...}

  2. 正しい引数が searchTree() に渡されると、コンポーネント セレクター メソッドを使用してコンテナーの既存のインスタンスを取得できます。たとえば、ボタンはすでにコンテナの子孫であるため、次のようにしてコンポーネントの正しいインスタンスを取得できます。

    var ctr = btn.up( "elemcontainer" )

    コンテナーの正しいインスタンスを取得したので、コンポーネント セレクター メソッドの 1 つを再度使用して、テキスト フィールドを見つけることができます。

    var str = ctr.down( 'テキストフィールド' ).getValue()

于 2013-10-20T14:55:44.733 に答える