Проблемы с областью действия, Sencha, передача данных для просмотра с контроллера в элементах?

Я передаю запись из контроллера через:

showDetail: function (list, record) {

    this.getMain().push({
        xtype: 'leaddetail',
        data: record.data
    });
},

Мой взгляд:

Ext.define('ApexChat.view.LeadDetail', {
extend: 'Ext.Panel',
xtype: 'leaddetail',

init: function() {
    debugger;
},


config: {
    styleHtmlContent: true,
    scrollable: 'vertical',
    title: 'Details',
    frame: true,
    labelwidth: 75,




    items: [
    {
        xtype: 'fieldset',
        columnWidth: 0.5,
        collapsible: true,
        title: 'Lead Information',
        defaultType: 'textfield',
        defaults: { anchor: '100%' },
        layout: 'vbox',
        items: [
            {
                fieldLabel: 'Name',
                name: 'name',
                tpl: '{name}',
                value: '{name}',
                disabled: true
            },
            {
                fieldLabel: 'Email',
                name: 'email',
                value: '{email}',
                disabled: true
            },
            {
                fieldLabel: 'Phone',
                name: 'phone',
                value: '{phone}',
                disabled: true
            }
        ]
       }, 
       {
           xtype: 'fieldset',
           columnWidth: 0.5,
           collapsible: true,
           title: 'Exta Information',
           defaultType: 'textfield',
           defaults: { anchor: '100%' },
           layout: 'vbox',
         items: [
            {
                fieldLabel: 'Company Key',
                name: 'companykey',
                value: '{companyKey}',
                disabled: true
            },
            {
                fieldLabel: 'Chat ID',
                name: 'chatid',
                value: '{chatId}',
                disabled: true
            },
            {
                fieldtype: 'textarea',
                fieldLabel: 'Notes',
                name: 'notes',
                value: '{notes}',
                disabled: true
            }
        ]
    }
 ]
}
});

Но внутри текстовых полей я все еще вижу {companyName}

Предполагая, что это невозможно сделать так, как мне получить доступ к записи, передаваемой из контроллера, чтобы я мог сделать .get('name') или что-то подобное?


person Jake Steele    schedule 07.06.2013    source источник


Ответы (1)


tpl и data используются для рендеринга пользовательского HTML, а поля Ext — это компоненты, которые обрабатывают собственный рендеринг. Вам не нужно трогать их tpl, за исключением расширенных вариантов использования.

В отличие от других фреймворков, которые в основном основаны на HTML-шаблонах, Ext по сути является объектно-ориентированной библиотекой компонентов. Вы редко переходите на уровень HTML самостоятельно.

Чтобы задать значения сразу нескольких полей, вам нужно поместить их в Ext.form.Panel. Затем вы можете использовать setValues или, что может быть более подходящим в вашем случае, setRecord.

Используя ваш пример, вы должны настроить свои поля следующим образом:

Ext.define('ApexChat.view.LeadDetail', {
    extend: 'Ext.Panel',
    xtype: 'leaddetail',

    config: {
        ...
        items: [{
            fieldLabel: 'Name',
            // you only need the name for the field to load data
            name: 'name'
        },{
            fieldLabel: 'Email',
            name: 'email'
        }]
    }
});

Затем вы можете назначить свою запись во время создания, используя record параметр конфигурации:

this.getMain().push({
    xtype: 'leaddetail',
    // using record config option
    record: record
});

Или вы можете использовать методы для загрузки данных:

// get a ref to your component the way you want, this line just illustrates what's in formPanel
var formPanel = Ext.create({xtype: 'leaddetail'});

// using setValues
formPanel.setValues(record.data);

// or using setRecord
formPanel.setRecord(record);
person rixo    schedule 08.06.2013
comment
Пробовал верхний метод, менял data:record.data на record:record, но данные все равно не загружаются? - person Jake Steele; 10.06.2013
comment
Ваш компонент leaddetail должен расширяться от Ext.form.Panel, а не от Ext.Panel. Кроме того, вы уверены, что this.getMain().push действительно то, что вам нужно? Разве вы не должны вызывать метод add вместо этого? - person rixo; 10.06.2013