Я новичок в Sencha Touch ...Sencha Touch, setRecord() не работает. Поля пусты.
Я искал и просил людей часами, но не могу понять, почему мой подробный вид не получает данные (используя setRecord).
Я не смог найти пример, который использует Ext.NavigationView, чтобы нажать представление, которое использует данные из setRecord, поэтому я подозреваю, что я что-то делаю не так.
У меня есть вид с вкладками. Первая вкладка отображает список элементов. Нажмите раскрытие позиции, чтобы просмотреть сведения об этом элементе. Появится подробный вид, но без каких-либо данных.
- Вкладки настраиваются в функции запуска ViewPortController.
- Основной вид на первой вкладке - PeopleListView. Все люди появляются в списке.
- PeopleListView добавлен в Ext.NavigationView. Ссылка на Ext.NavigationView добавляется в PeopleListView, поэтому ее можно использовать позже
- PeopleListViewController имеет функцию showDetailView, которая успешно вызывается при нажатии кнопки раскрытия.
- функция showDetailView контроллера
- устанавливает запись (которая содержит правильные данные) на personDetailView,
- извлекает экземпляр Ext.NavigationView и толкает PersonDetailView.
- Значение записи, переданное в showDetailView, содержит правильные данные.
- При появлении personDetailView поля не имеют данных.
ViewPortController:
launch: function() {
// var personDetailView = {
// xtype: 'persondetailview'
// }
var pplView = Ext.create('PeopleApp.view.PeopleListView');
var pplNavView = Ext.create('Ext.NavigationView', {
title: 'People',
iconCls: 'home',
useTitleForBackButtonText: true,
});
pplView.setNavigationView(pplNavView);
pplNavView.add(pplView);
. . .
var mainViewPort = getMainViewPort();
mainViewPort.setItems([pplNavView, . . .]);
},
PersonModel:
Ext.define('PeopleApp.model.PersonModel', {
extend: 'Ext.data.Model',
requires: ['Ext.data.proxy.Rest'],
config: {
idProperty: 'id',
fields: [
{ name: 'id', type: 'auto' },
{ name: 'name', type: 'string' },
{ name: 'address', type: 'string' },
{ name: 'email', type: 'string' },
{ name: 'age', type: 'int' },
{ name: 'gender', type: 'string' },
{ name: 'note', type: 'string' }
],
proxy: {
type: 'rest',
url: '/app/data/people.json',
reader: {
type: 'json',
rootProperty: 'people'
}
},
}
});
PeopleListViewController:
Ext.define('PeopleApp.controller.PeopleListViewController', {
extend: 'Ext.app.Controller',
xtype: 'peoplelistviewcontroller',
config: {
refs: {
peopleListView: 'peoplelistview',
personDetailView: 'persondetailview',
peopleView: 'peopleview',
},
control: {
peopleListView: {
discloseDetail: 'showDetailView'
}
}
},
showDetailView: function(view, record) {
console.log("record.data.name=" + record.data.name);
var detailView = Ext.create('PeopleApp.view.PersonDetailView');
//var detailView = this.getPersonDetailView();
detailView.setRecord(record);
var navView = view.getNavigationView();
navView.push(detailView);
},
launch: function() { this.callParent(arguments); },
init: function() { this.callParent(arguments); },
});
PersonDetailView:
Ext.define('PeopleApp.view.PersonDetailView', {
extend: 'PeopleApp.view.BaseView',
xtype: 'persondetailview',
requires: [
'Ext.form.FieldSet',
'Ext.form.Text',
'Ext.form.TextArea'
],
config: {
title: "Person Details",
scrollable: true,
items: [{
xtype: 'fieldset',
items: [{
xtype: 'textfield',
name: 'name',
label: 'Name: ',
required: true
}, {
xtype: 'textfield',
name: 'age',
label: 'Age: ',
required: false
}, // etc.
]}
]}
});
Можете ли вы рассказать мне, почему detailView.setRecord (запись) не получает данные, заданные в полях DetailViewController, и что мне нужно делать по-другому?
Спасибо за ответ.Ничего себе, массивы элементов вложены в 3 уровня. Я не видел функцию .down. Я попробовал. Теперь мой personDetailView выглядит пустым. Даже не появляются поля или ярлыки. – jimmyg
Ответ: У вашего предложения был xtype: 'formpanel', который был на правильном пути. PersonDetailView расширяет PeopleApp.view.BaseView, который по очереди расширяет Ext.Container. Когда я изменил расширение Ext.form.Panel (а не Ext.Panel, которое я также пробовал), все сработало хорошо. Благодаря! – jimmyg