0

Я пробовал разные вещи, но мне не удалось передать данные с контроллера для просмотра (компоненту внутри контейнера).Я не могу передать данные с контроллера на представление в Sencha Touch 2.4

Здесь у меня есть мнение ServisDetail.js:

Ext.define('Asistan.view.ServisDetail', { 
    extend: 'Ext.Container', 
    xtype: 'servisDetail', 
    config: { 
     layout: 'fit', 
     items : [ 
      { 
       xclass : 'Asistan.view.ServisToolbar' 
      }, 
      { 
       // "data: {}" is needed to work. I try to pass data from controller to here 
       xtype: 'component', 
       tpl: Ext.create('Ext.XTemplate','{URUN_CIHAZ_ADI} jkjk') 
      } 
     ] 
    } 
}); 

А вот мой контроллер Servis.js, который я думаю, подумал, что это должно работать. Но он не передает данные:

Ext.define('Asistan.controller.Servis', { 
    extend: 'Ext.app.Controller', 
    config: { 
     refs: { 
      servis: 'servisNavigationView servisContainer list', 
     }, 
     control: { 
      servis: { 
       itemdoubletap: 'showServis' 
      } 
     } 
    }, 
    showServis: function(item, index, e, eOpts) { 
     this.servis = Ext.widget('servisDetail'); 
     this.servis.config.items[1].data = eOpts.data; // <- Here! It doesn't work. console.log shows that the data is there but in the browser the data doesn't show up. 
     console.log(this.servis.config.items[1].data); // I can see my data here, right before the push 
     item.up('servisNavigationView').push(this.servis); 
    } 
}); 

Что мне не хватает?

ответ

0

деталь с tpl должен иметь id.

{ 
    id: 'itemWithTpl', // <- here 
    xtype: 'component', 
    tpl: Ext.create('Ext.XTemplate','{URUN_CIHAZ_ADI} jkjk') 
} 

И контроллер:

showServis: function(item, index, target, record, e, eOpts) { 
    this.servis = Ext.widget('servisDetail'); 
    item.up('servisNavigationView').push(this.servis); 
    Ext.getCmp('itemWithTpl').setData(record.data); // <- here 
} 
1

Попробуйте использовать

showServis: function(item, index, e, eOpts) { 
    this.servis = Ext.widget('servisDetail'); 
    this.servis.setData(eOpts.data); // setData applies the data to the container template. 
    item.up('servisNavigationView').push(this.servis); 
} 
+0

Ваш код передает данные в контейнер, а не к компоненту с 'tpl'. – ilhan

+1

Вам следует избегать использования Ext.getCmp() в приложении Sencha Touch. У вас возникнут проблемы, если на вашей странице есть несколько экземпляров вашего компонента. Вместо этого используйте методы Ext.ComponentQuery. –

+0

Я бы предпочел использовать itemId вместо id, чтобы вы могли разрушать представления и воссоздавать их. – Dinkheller