ExtJS 4 Загрузка данных в панель формы при создании. Какое событие поймать? - PullRequest
1 голос
/ 09 августа 2011

Я застрял с заполнением Ext.form.Panel данными в моем проекте MVC.В контроллере я хочу загрузить данные из магазина в форму.Но я не могу получить доступ к базовой форме через панель форм.

Вид формы

Ext.define('Example.view.webitem.Form', {
    extend: 'Ext.form.Panel', 
    alias: 'widget.webitemform',
    renderTo: 'webstructure-form',

    items: [{
        xtype: 'fieldset',
        title: 'Metadata',
        items: [{
            xtype: 'displayfield',
            name: 'id',
            fieldLabel: 'ID'
        },
        {
            xtype: 'textfield',
            name: 'name',
            fieldLabel: 'Name'
        }]
    }],
    buttons: [{
        text: 'Load',
        action: 'loaditem'
    }]
});

Контроллер

Ext.define('Example.controller.WebItemsForm', {
    extend: 'Ext.app.Controller',

    stores: ['WebItemsForm'],
    models: ['WebItem'],
    views: ['webitem.Form'],
    init: function() {
        // This does not work. Data aren't loaded in store
        this.control({
            'webitemform': {
               render: this.loadItem
            }
        });
        // This works, but isn't userfriendly
        this.control({
            'webitemform button[action=loaditem]': {
                click: this.loadItem
            }
        });
    },    
    loadItem: function() {
        var form = this.getWebItemForm().getForm();
        var data = this.getStore('WebItemsForm').getAt(0);
        form.loadRecord(data);
    }
});

После нажатия кнопки Load данные правильно загружаются вформа.Но когда я пытаюсь поймать событие Ext.form.Panel render, в магазине не загружаются данные.

Uncaught TypeError: Cannot read property 'data' of undefined. 

Если я правильно понимаю, это вызвано тем, что операция загрузки является асинхронной? Как загрузить данные о событии рендеринга?Есть ли более подходящее событие?

1 Ответ

1 голос
/ 10 августа 2011

После того, как панель обработана (событие afterrender), проверьте, загружено ли хранилище (обычно это не будет, если визуализация панели не была отложена, потому что она находится, например, на неактивной вкладке). Если тест не пройден в том же событии, добавьте слушатель load в хранилище, и он вернет данные на панель, как только будет готов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...