SenchaTouch:Ext.getCmp()。setSrc()方法不起作用

时间:2013-04-07 18:37:06

标签: image extjs sencha-touch-2

我正在尝试使用setSrc更改图像的来源,但是我收到此错误: 未捕获的TypeError:无法调用未定义的方法'setSrc'

  

Ext.Ajax.request.success Ext.apply.callback Ext.define.onComplete   Ext.define.onStateChange(匿名函数)

这是我的源代码: 查看页面:

Ext.define('MechanicalTerk.view.Picture', {
extend: 'Ext.Container', 
xtype: 'Picture',
requires: [
    'Ext.data.Store'
],
config: {
    layout: 'vbox', 
    items: 
    [
        {
            xtype: 'toolbar',
            docked: 'top',
            title: 'Requests',
            minHeight: '60px',
            items: [
                {
                    xtype:'button',
                    ui:'back button',
                    id:'backButton',
                    text:'Back'


                },{
                    xtype: 'button',
                    id:'logoutButton', 
                    text: 'Logout'
                }
            ],          
        },


        {
            xtype:'image',
            height:500,
            id:'layoutImage'
        }  
    ]
}
});

控制器:

Ext.define('MechanicalTerk.controller.PictureController',{
extend:'Ext.app.Controller',
showPicture: function(userID,sentAt){
    Ext.Ajax.request({
        url:'app/Model/database.php',
        params: {
            functionID: 3,
            userID: userID,
            sentAt: sentAt,
        },
        success: function (response, opts){
Ext.getCmp('layoutImage').setSrc('http://www.sencha.com/img/20110215-feat-perf.png');
Ext.Viewport.setActiveItem(Ext.create('MechanicalTerk.view.Picture'));
            }
        });
    }
});

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应该考虑不使用自己的id,而是使用itemId。这可能正在发生,因为您正在尝试重新使用已被销毁的组件。我建议您在控制器中为图像创建ref,以便访问它。

所以我在想:

Ext.define('MechanicalTerk.controller.PictureController',{
    extend:'Ext.app.Controller',

    config: {
        refs : {
            myImage : {
                autoCreate: true,
                selector: '#myimage',//assuming your image's itemId is 'myimage'
                xtype: 'image'
            }
        }
    },
    showPicture: function(userID,sentAt){
        Ext.Ajax.request({
            url:'app/Model/database.php',
            params: {
                functionID: 3,
                userID: userID,
                sentAt: sentAt,
            },
            success: function (response, opts){
                var me = this;
                me.getMyImage().setSrc('http://www.sencha.com/img/20110215-feat-perf.png');
                Ext.Viewport.setActiveItem(Ext.create('MechanicalTerk.view.Picture'));
            }
        });
    }
});

PS:未经测试但尝试采用这种方法。