Sencha Touch,setRecord() 不工作。字段为空白。

Sencha Touch, setRecord() not working. Fields are blank.

我是 Sencha Touch 新手...

我已经搜索并询问了几个小时的人,但无法弄清楚为什么我的详细视图没有获取数据(使用 setRecord)。

我找不到使用 Ext.NavigationView 推送视图的示例,该视图使用来自 setRecord 的数据,所以我怀疑我在那里做错了。

我有一个标签视图。第一个选项卡显示项目列表。单击项目披露以查看该项目的详细信息。出现详细视图,但没有任何数据。

视口控制器:

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