Sencha Touch 2视图中的第二个更改侦听器会破坏构建

时间:2013-06-12 04:02:36

标签: javascript extjs sencha-touch sencha-touch-2

我有一个使用此评级类的Sencha Touch 2视图:Ext.ux.touch.rating,有两个实例:

{
    xtype: 'rating',
    id: 'rating1',
    value: -1,
    itemCls: 'x-rating-star',
    itemHoverCls: 'x-rating-star-hover',
    listeners: {
        change: function () {
            Ext.getCmp('ratingBtn').setDisabled(Ext.getCmp('rating2').getValue() == -1)
        }
    }
},
...
{
    xtype: 'rating',
    id: 'rating2',
    value: -1,
    itemCls: 'x-rating-star',
    itemHoverCls: 'x-rating-star-hover',
    listeners: {
        change: function () {
            Ext.getCmp('ratingBtn').setDisabled(Ext.getCmp('rating1').getValue() == -1)
        }
    }
},
...
{
    xtype: 'button',
    ui: 'confirm',
    text: 'Rate',
    id: 'ratingBtn',
    disabled: true
},

我正在尝试使用上面的代码来获得ratingBtn(我的代码中的ID名称略有不同),以便在两个评级都被填充后启用。

如果我只附加了第一个监听器,那么工作正常(除了第二个评级更改没有动作)。如果我使用console.log(this)或console.log(this.parent)或甚至Ext.getCmp('ratingBtn')附加第二个侦听器,那么应​​用程序构建正常。

但是如果我尝试在元素上调用setDisabled()(这只发生在第二个侦听器上......即使我将其称为setDisabled(false)也会发生),我在编译时会得到这个(加上一个巨大的堆栈跟踪):

[ERROR] TypeError: 'undefined' is not an object
Stack trace:
    file:////[snipped]/app/view/[snipped].js?_dc=1371009329838 : 346 : Anonymous

第346行是我尝试调用setDisabled()的行。

我找不到一种方法(包括将两个监听器都推送到控制器)来摆脱这个错误,或者一个有效的错误。甚至做像document.getElementById这样的顽皮的东西也会返回null,所以构建工具说。

那么,我该如何解决这个问题呢?我意识到上面的代码不会赢得OOP的任何奖项,但它至少应该构建......对吗?!?我如何做到这一点?

0 个答案:

没有答案