Sencha Touch 2:将数据从控制器传递到视图

时间:2012-11-16 00:57:18

标签: javascript model-view-controller mobile sencha-touch sencha-touch-2

我正在尝试从列表中加载项目公开的详细信息视图,但不使用NavigationView和“push()”命令。

CONTROLLER

Ext.define('App.controller.MyPlans', {
    extend: 'Ext.app.Controller',
    requires: ['App.view.EventDetail',
        'App.view.PlansContainer'],

    config: {
        refs: {

        },
        control: {
            'MyPlansList': {
                disclose: 'onDisclose'
            }
        }
    },

    onDisclose: function (view, record) {
        console.log("My Plans list disclosure " + record.get('id'));
        var eventDetailView = Ext.create('App.view.EventDetail');
        eventDetailView.setRecord(record);
        Ext.Viewport.setActiveItem(eventDetailView);
    }
});

查看:

Ext.define('App.view.EventDetail', {
    extend: 'Ext.Panel',
    xtype: 'EventDetail',

    config: {

        items: [{
            xtype: 'toolbar',
            docked: 'top',
            title: 'Event Name',
            items: [{
                xtype: 'button',
                id: 'addRunBackBtn',
                ui: 'back',
                text: 'Back'
            }]
        }, {
            xtype: 'panel',
            styleHtmlContent: true,
            itemTpl: [
                '<h1>{name}</h1>',
                '<h2>{location}</h2>',
                '<h2>{date}</h2>']
        }],

    }
});

我基本上是尝试使用“setRecord()”命令将数据传递给视图,但视图中似乎没有任何内容。有什么想法??

由于

3 个答案:

答案 0 :(得分:1)

而不是ItemTpl只是写Tpl。我怀疑itemTpl是否存在没有列表xtype。

其他的事情是把Tpl放在config:

{tpl:['<div class="ListItemContent">{descriptionddata}</div>']}

我之前/之上的答案是好的,但如果你打算将格式保留在视图中而不是在控制器中,那么它的工作方式是使用setData而不是setRecord

detailview.setData({title:record.get('title'), description:record.get('descriptiondata')});

答案 1 :(得分:0)

我在这里找到了问题:

面板没有itemTpl

{
    xtype: 'panel',
    styleHtmlContent: true,
    itemTpl : [
        '<h1>{name}</h1>',
        '<h2>{location}</h2>',
        '<h2>{date}</h2>'
    ]
}

可能的方法之一可能是:

更改视图:

{
    xtype: 'panel',
    id: 'thePanel',
    styleHtmlContent: true
}

更改控制器:

onDisclose: function(me, record, target, index, e, eOpts) {
  ... 
  Ext.getCmp('thePanel').setHtml('<h1>'+record.get('name')+'</h1><h2>'+record.get('location')+'</h2><h2>'+record.get('date')'</h2>'); //For setting the Data
  ...
}

希望这有帮助!

答案 2 :(得分:0)

而不是面板试用列表如下

Ext.define('App.view.EventDetail', {
    extend: 'Ext.TabPanel',
    xtype: 'EventDetail',
    config: {
        items: [{
            xtype: 'toolbar',
            docked: 'top',
            title: 'Event Name',
            items: [{
                xtype: 'button',
                id: 'addRunBackBtn',
                ui: 'back',
                text: 'Back'
            }]
        }, {
            xtype: 'list',
            styleHtmlContent: true,
            itemTpl: [
                '<h1>{name}</h1>',
                '<h2>{location}</h2>',
                '<h2>{date}</h2>']
        }],
    }
});