передавать данные из контроллера в существующее представление в sencha tocuh

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

от контроллера

1. Ext.Viewport.setActiveItem('profileinfo');
   Ext.Viewport.setData(record.data);

2. Ext.Viewport.setActiveItem('profileinfo').setData(record.data);

3. Ext.Viewport.setActiveItem('profileinfo', {data:record.data});

4. Ext.Viewport.setActiveItem({ xtype:'profileinfo', data:record.data});

где profileinfo - это панель, на которой есть titlebar, и я отображаю title как {member_data}, который является частью данных.

loadList:function(me, index, target, record, e, eOpts){


        console.log(record.data.member_name);

            Ext.Viewport.setActiveItem({ 
                xtype:'profileinfo', 
                data:record.data}
            );



    }

я вижу в функции initialize моей панели profileinfo, что data доступна, но я не могу получить к ней доступ с помощью {member_name}

initialize: function(){
       this.callParent();

       console.log("initialized");
       console.log(this.config.data); // able to see the data 
    }

но данные не отображаются в панели

  {

        xtype:'titlebar',
        title:'{member_name}' // its displaying {member_name} text rather then data itself


    } 

обновить

вот код profileinfo

 Ext.define('demo.view.ProfileInfo', {
        extend: 'Ext.form.Panel',
        xtype: 'profileinfo',
        requires: [ 'Ext.TitleBar','demo.view.ProfileMemberInfo'],
        config: {


            layout:'vbox',


            items: [

            {
                xtype: 'titlebar',
                title: 'demo',
                cls: 'bms-bg-head',
                height:'65px',
                center:true,
                html:'<div class="demo-mini-logo"></div>'
            },{




                    xtype:'label',
                    // nothing is visible here
                    html:'{member_name}'



            }]
        },

        initialize: function(){
           this.callParent();

           //  record is visible
           console.log(this.config.record);





    }

});

вот код контроллера

loadList:function(me, index, target, record, e, eOpts){



            Ext.Viewport.setActiveItem({ 
                xtype:'profileinfo', 
                record:record
                }
            );





    }

person Hunt    schedule 03.08.2013    source источник


Ответы (1)


Вы сказали, что получаете данные в методе панели initialize, так что вы можете сделать это

initialize: function(){
       this.callParent();
       console.log("initialized");
       var data = this.config.data;
       this.down('titlebar').setTitle(data.member_data);
}

Основываясь на ваших комментариях, вы можете установить данные на панель, которую вы установить запись.

Обновить

Имейте ссылку на formPanel в вашем контроллере

config : {
        refs : {
            Profileinfo: 'profileinfo'
        }
    } 

В представлении ProfileInfo

Для выбора ярлыка я предлагаю вам указать itemId для ярлыка, подобного этому

{ 
  xtype:'label',
   itemId: 'member'
}

В функции loadList вашего контроллера

Если у вас есть поля (текстовое поле, поле выбора и т. д.) внутри панели форм, вы можете использовать setValues() для установки данных, как я сделал ниже.

Но метка не является полем, поэтому вам нужно выбрать ее, а затем использовать setHtml() для установки данных.

loadList:function(me, index, target, record, e, eOpts){

 Ext.Viewport.setActiveItem({ xtype:'profileinfo'});

 this.getProfileinfo().setValues(record.getData());

 //As you posted in your question, I am assuming member label is child of Profileinfo
 this.getProfileinfo().getComponent('member').setHtml(record.getData().member_name)

}

Самое важное

Свойства или поля в record должны совпадать с именами полей в панели from. Тогда работает только setValues().

Пример

Если у вас есть такое поле в frompanel

 {
   xtype: 'textfield',
   label: 'First Name',
   name: 'Firstname'
 }

record.getData() должно иметь свойство Firstname.


Обновление для настройки данных в панели с tpl

Допустим, у вас есть такая панель

Ext.define('MailApp.view.MessageDetails', {
    extend: 'Ext.Panel',
    xtype: 'messageDetails',   
    config: {
        items : [{
                 xtype: 'titlebar',
                 docked: 'top',
                 itemId: 'detailsTitle'
              },
            {
            xtype : 'panel',
            itemId : 'details',
            tpl : new Ext.Template(
            '<div class="details">',
            '<p>From : {from}</p>',
            '<p>Subject : {subject}</p>',
            '<p>Message : {message}</p>',                   
            </div>'
            )
        }]
    }
});

В функции loadList вашего контроллера

loadList:function(me, index, target, record, e, eOpts){
 var data = record.getData();

 Ext.Viewport.setActiveItem({ xtype:'messageDetails'});

 // Don't forget to put refference to work this.getMessageDetails()

 this.getMessageDetails().getComponent('details').setData(data);

 this.getMessageDetails().getComponent('detailsTitle').setHtml(data.detailsTitle)

}

Когда вы печатаете console.log(record.data()), вы должны иметь

Object {from: "Apple", subject: "welcome", message: "Apple welcomes you to mail app", detailsTitle: " Mail Deatils", id: "ext-record-1", xindex: 1}

Я имею в виду, что свойства должны соответствовать полям в файле tpl.

Это то, что вы можете сделать, чтобы установить данные в пользовательском HTML-коде панели, используя tpl.

person Viswa    schedule 03.08.2013
comment
можно ли установить его с помощью {member_name}, потому что у меня есть другие компоненты для установки, даже код, который вы предложили, также не работает - person Hunt; 03.08.2013
comment
что вы имеете в виду, не работает .. вы получаете какую-либо ошибку или устанавливаете undefined? - person Viswa; 03.08.2013
comment
да, и он отображается в консоли, но не внутри заголовка - person Hunt; 03.08.2013
comment
это console.log(this.down('titlebar')); печать объекта заголовка? - person Viswa; 03.08.2013
comment
да, я думаю, у меня есть два заголовка, и он устанавливался в первом, что делать, если я хочу установить его во втором? более того, есть ли способ установить данные как {member_name} bcoz на панели, у меня есть 10 новых полей, и не следует устанавливать их, используя только установленные методы - person Hunt; 03.08.2013
comment
дайте itemId для второй строки заголовка и выберите с помощью this.getComponent(itemId).. используйте setRecord, как я сказал в своем ответе, для настройки данных на панели. - person Viswa; 03.08.2013
comment
см. этот вопрос - person Viswa; 03.08.2013
comment
подход, который вы предложили, следует шаблону MVC? и дело в том, что я вообще не хочу использовать форму, я хочу отображать свой собственный html-фрейм, так как форма имеет свой собственный стиль, и его стиль снова - большая боль - person Hunt; 03.08.2013
comment
Да, это следует за MVC, и я всегда следую MVC в сенсорном прикосновении. если вы не хотите формировать .. создайте панель с tpl и поместите в нее html, затем установите данные с помощью функции setData () из контроллера, позвольте мне объяснить это в моем ответе .. - person Viswa; 04.08.2013