Sencha Touch,setRecord() 不工作。字段为空白。
Sencha Touch, setRecord() not working. Fields are blank.
我是 Sencha Touch 新手...
我已经搜索并询问了几个小时的人,但无法弄清楚为什么我的详细视图没有获取数据(使用 setRecord)。
我找不到使用 Ext.NavigationView 推送视图的示例,该视图使用来自 setRecord 的数据,所以我怀疑我在那里做错了。
我有一个标签视图。第一个选项卡显示项目列表。单击项目披露以查看该项目的详细信息。出现详细视图,但没有任何数据。
- 选项卡在 ViewPortController 的启动函数中设置。
- 第一个选项卡中的主视图是 PeopleListView。所有的人都出现在列表中。
- PeopleListView 已添加到 Ext.NavigationView。对 Ext.NavigationView 的引用已添加到 PeopleListView 以便稍后使用
- PeopleListViewController 有一个函数 showDetailView,它会在点击公开按钮时成功调用。
- 控制器的showDetailView函数
- 在 personDetailView 上设置记录(包含正确的数据),
- 检索 Ext.NavigationView 的实例并推送 PersonDetailView。
- 传递给 showDetailView 的记录值具有正确的数据。
- 出现personDetailView时,字段没有数据。
视口控制器:
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, . . .]);
},
人物模型:
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(record) 没有获取 DetailViewController 字段中的数据集,我需要做些什么不同的事情吗?
我不确定,但您应该在个人详细信息视图中使用以下代码:
items: [
{
xtype:'formpanel',
id:'personDetailViewForm',
items:[{
xtype: 'fieldset',
items: [{
xtype: 'textfield',
name: 'name',
label: 'Name: ',
required: true
}, {
xtype: 'textfield',
name: 'age',
label: 'Age: ',
required: false
}, // etc.
]
}]
}]
并且在 personListViewController 中,您可以设置该表单的值,而不是将记录设置到视图中,例如:
var detailView = Ext.create('PeopleApp.view.PersonDetailView');
var personDetailViewForm = detailView.down('#personDetailViewForm ');
personDetailViewForm .setValues(records);
请注意,记录对象 属性 名称和表单字段名称必须匹配,如果 records
不起作用,请尝试使用 records.data
。
我是 Sencha Touch 新手...
我已经搜索并询问了几个小时的人,但无法弄清楚为什么我的详细视图没有获取数据(使用 setRecord)。
我找不到使用 Ext.NavigationView 推送视图的示例,该视图使用来自 setRecord 的数据,所以我怀疑我在那里做错了。
我有一个标签视图。第一个选项卡显示项目列表。单击项目披露以查看该项目的详细信息。出现详细视图,但没有任何数据。
- 选项卡在 ViewPortController 的启动函数中设置。
- 第一个选项卡中的主视图是 PeopleListView。所有的人都出现在列表中。
- PeopleListView 已添加到 Ext.NavigationView。对 Ext.NavigationView 的引用已添加到 PeopleListView 以便稍后使用
- PeopleListViewController 有一个函数 showDetailView,它会在点击公开按钮时成功调用。
- 控制器的showDetailView函数
- 在 personDetailView 上设置记录(包含正确的数据),
- 检索 Ext.NavigationView 的实例并推送 PersonDetailView。
- 传递给 showDetailView 的记录值具有正确的数据。
- 出现personDetailView时,字段没有数据。
视口控制器:
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, . . .]);
},
人物模型:
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(record) 没有获取 DetailViewController 字段中的数据集,我需要做些什么不同的事情吗?
我不确定,但您应该在个人详细信息视图中使用以下代码:
items: [
{
xtype:'formpanel',
id:'personDetailViewForm',
items:[{
xtype: 'fieldset',
items: [{
xtype: 'textfield',
name: 'name',
label: 'Name: ',
required: true
}, {
xtype: 'textfield',
name: 'age',
label: 'Age: ',
required: false
}, // etc.
]
}]
}]
并且在 personListViewController 中,您可以设置该表单的值,而不是将记录设置到视图中,例如:
var detailView = Ext.create('PeopleApp.view.PersonDetailView');
var personDetailViewForm = detailView.down('#personDetailViewForm ');
personDetailViewForm .setValues(records);
请注意,记录对象 属性 名称和表单字段名称必须匹配,如果 records
不起作用,请尝试使用 records.data
。