0

現在、Phonegap1.6.0とSenchaTouch1.1を使用してWebベースのモバイルアプリを作成しています。このアプリは、ユーザーがクリックできるいくつかのパネルで構成されています。これらのパネルの一部には、テキストフィールドまたはテキストエリアがあります。パネルに入ると、これらが自動的にフォーカスされるようにします。これはテキストフィールドでは機能するようですが、テキストエリアでは機能しません。

次のコンポーネントを備えたパネルがあります。

xtype: 'textareafield',
cls: 'jasbackblock',
id: 'addreactiontextarea',
height: '100%',
grow: true,
listeners: {
    afterrender: function(cmp) {
    console.log('Component rendered.');
    cmp.fieldEl.dom.focus();
}

私が最初にパネルを開くときはいつでも、それは自動的に焦点を合わせます、それは良いことです。しかし、パネルを離れてパネルに戻ると、イベントでこれを行うための良い方法を考えることができません。私は以前にパネルでショーリスナーを試しました:

listeners: {
    show: function(cmp) {
        Ext.get('addreactiontextarea').fieldEl.dom.focus();
    }
}

これにより、次のエラーが発生します。

Uncaught TypeError: Cannot read property 'fieldEl' of null 

ショーイベント中は要素にアクセスできないようです。パネルが読み込まれるたびに発生し、テキストエリアにアクセスできるようにする、使用できるイベントは他にありますか?

ヘルプがある場合、これは、あるパネルから別のパネルに切り替えるために呼び出すメソッドです。

function switchScreen(from, to, newArgs) {
    /* Save screen information. */
    if (from != -1)
        historyStack.push([from, screenArgs]);

    if (currentPage > 2) {
        if (to != 3)
            main.getComponent(3).hide();
        app.getComponent(currentPage - 3).hide();
    }
    else
        main.getComponent(currentPage).hide();

    screenArgs = newArgs;

    if (to > 2) {
        main.setActiveItem(3);
        app.setActiveItem(to - 3);

        /* setActiveItem does not fire a screen's show event if it has been
         * shown before. Since we want the code in the screen's show listener to
         * be executed every time we switch to the screen, we call show manually
         * just to fire the event. */
        main.getComponent(3).show();
        app.getComponent(to - 3).show();
    }
    else {
        main.setActiveItem(to);
        main.getComponent(to).show();
    }

    if (to == 0 || to == 1)
        adMode = to;
    else
        adMode = -1;

    currentPage = to;
}
4

1 に答える 1

0

私は問題を解決しました。問題は、DOM要素がどのように機能するかをよく知らなかったということでした。

Ext.get('id')は、IDが'id'のJavascriptオブジェクトのDOM要素を返します。オブジェクト自体は返しません。Ext.getCmp('id')は、IDが'id'のJavascriptオブジェクトを返します。したがって、Ext.getCmp('id')。fieldElは、Ext.get('id')と同じオブジェクトを返します。

Sencha Touch 1.1のバグのため、Senchaフォーカス機能ではなくDOMフォーカス機能を使用することにしました。この関数には、Ext.getCmp('id')。fieldEl.dom.focus()またはExt.get('id')。dom.focus()のいずれかでアクセスできます。私の質問でわかるように、私はこれらを混ぜ合わせました。DOM要素の経験が不足しているため、このようにObject関数を使用しようとすると、さらに混乱しました。(Ext.get('id')。reset()は単に非論理的です。)

ご不明な点がございましたら、お気軽にご連絡ください。

于 2012-07-12T11:57:49.743 に答える