Sencha Touch 2 Ext.List - программно добавить подробный вид
Я пытаюсь добавить другой подробный вид на основе записи в списке.
- У меня есть домашний экран, который использует компонент "Список", и это представление отображает ["Недвижимость", "Транспорт", "Работа"]... в качестве пунктов меню.
- На основе выбранного элемента в списке, я хочу, чтобы отобразить другое представление.
- И я хочу следовать шаблону проектирования MVC..
Вот код... App.js
Ext.application({
name: 'App',
controllers: ['Main'],
views: ['Viewport', 'HomePage'],
stores: ['HomePageItems'],
models: ['HomePageItem'],
launch: function () {
Ext.Viewport.add(Ext.create('App.view.Viewport'));
}
});
Viewport.js
Ext.define("App.view.Viewport", {
extend: 'Ext.navigation.View',
requires: [ 'App.view.realestate.Realestate',
'App.view.HomePage',
'App.view.jobs.Jobs',
'App.view.other.Other',
'App.view.vehicles.Vehicles'
],
config: {
items: [
{
xtype: 'homepage'
}
]
}
});
HomePage.js (xtype = "homepage")
Ext.define('App.view.HomePage', {
extend: 'Ext.List',
xtype: 'homepage',
id: 'homepage',
config: {
title: 'Oglasi',
itemTpl: '<strong>{name}</strong><p style="color:gray; font-size:8pt">{description}</p>',
store: 'HomePageItems',
onItemDisclosure: true
}
});
Main.js
Ext.define('App.controller.Main', {
extend: 'Ext.app.Controller',
config: {
refs: {
main: '#homepage'
},
control: {
'homepage': {
disclose: 'HookUpDetailView'
}
}
},
HookUpDetailView: function (element, record, target, index, ev) {
// TO DO: I have 4 differente views to load programmaticaly based on selected item in List
//'App.view.realestate.Realestate'
//'App.view.jobs.Jobs'
//'App.view.other.Other'
//'App.view.vehicles.Vehicles'
}
});
Я нашел один пример, но он не работает для меня (метод push не существует)
this.getMain().push({
xtype: 'realestatehome'
});
Заранее спасибо!
3 ответа
Метод, который вы ищете
http://docs.sencha.com/touch/2-0/
this.getMain().add({xtype: 'realestatehome'});
Но то, что у вас есть, не имеет смысла, realestatehome - это список, вы не можете добавить компонент под ним. Вам нужно почитать про макеты по ссылке выше
Толчок должен работать. Вы можете попробовать что-то вроде этого.
HookUpDetailView: function (list, record) {
if(record.data.description==='real estate'){
this.getRealEstate().push({
xtype: 'realestatehome',
title: record.data.description,
data. record.data
});
if(record.data.description==='Vehicles'){
this.getVehicles().push({
xtype: 'vehicles',
title: record.data.description,
data. record.data
});
}
}
И конкретный вид может выглядеть
Ext.define('App.view.RealEstateHome', {
extend: 'Ext.Panel',
xtype: 'realestatehome',
config: {
styleHtmlContent: true,
scrollable: 'vertical',
tpl: [
'{description}, {example}, {example}, {example}'
]
}
});
А ссылки на доступ к вашему конкретному виду должны выглядеть примерно так
refs: {
realEstate: 'realestatehome',
vehicles: 'vehicleshome'
},
надеюсь, это поможет
Я сделал ошибку в контроллере this.getMain() get main возвращает Ext.List, и мне нужен Ext.navigation.View с методом push.
Итак... я добавил xtype и id в свой видовой экран ("контейнер") и быстрое изменение в моем контроллере решило мои проблемы...
refs: {
main: '#homepage',
container: '#container'
}
и вместо того, чтобы получить объект Ext.List
this.getContainer().push({
xtype: 'realestatehome'
});
И эта работа, как шарм:)