読者です 読者をやめる 読者になる 読者になる

初心者のためのExtJS入門

ExtJSを使うので、ついでにまとめていきます

チュートリアル:referenceを使って参照する

ExtJS

フォームの入力欄をカスタマイズすることにしました。

入力項目は「タイトル」「本文」の2つです(だんだんメモ登録っぽくしていってます)。

/**
 * ビューポートクラス。
 *
 * @class Memo.view.main.Main
 * @extend Ext.Panel
 */
Ext.define('Memo.view.main.Main', {
    extend: 'Ext.Panel',
    xtype: 'app_main',

    requires: [
        'Memo.view.main.ViewController'
    ],

    controller: 'app_main',

    bodyPadding: 20,

    items: [
        {
            xtype: 'form',
            items: [
                {
                    reference: 'title',
                    xtype: 'textfield',
                    emptyText: 'タイトルを入力してください'
                },
                {
                    reference: 'body',
                    xtype: 'textarea',
                    emptyText: '本文を入力してください'
                },
                {
                    xtype: 'button',
                    text: '保存',
                    handler: 'onClickSaveButton'
                }
            ]
        },
        {
            reference: 'list',
            xtype: 'dataview',
            tpl: [
                '<tpl for=".">',
                '<div class="item">{title}</div>',
                '</tpl>'
            ],
            itemSelector: 'div.item',
            store: {
                proxy: 'memory',
                data: [
                    { title: 'タイトル1', body: '本文1' },
                    { title: 'タイトル2', body: '本文2' },
                    { title: 'タイトル3', body: '本文3' }
                ]
            }
        }
    ]
});

そして、ビューコントローラから入力フィールドを参照するのにgetComponentを使っていましたが、入力フィールドの順番を入れ替えるとその度に修正しないといけないので、referenceを使うように変更しました。

/**
 * Memo.view.main.Mainのビューコントローラクラス。
 *
 * @class Memo.view.main.ViewController
 * @extend Ext.app.ViewController
 */
Ext.define('Memo.view.main.ViewController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.app_main',

    /**
     * 保存ボタンクリック時の処理。
     */
    onClickSaveButton: function () {
        var me = this,
            titleField = me.lookupReference('title'),
            bodyField = me.lookupReference('body'),
            list = me.lookupReference('list'),
            store = list.getStore();

        store.add({
            title: titleField.getValue(),
            body: bodyField.getValue()
        });
    }
});

このように、referenceを指定しておくと、lookupReferenceメソッドを使って参照できます。

ちなみに、ビューコントローラのlookupReferenceは、内部処理としてはビューのlookupReferenceを実行してます。

f:id:sham-memo:20170111204647p:plain

今回で、こんな感じの画面になりました。 次回はフォームパネルの機能を使ってみます。