1

我有一个使用这个评级类的 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 赢得任何奖项,但它至少应该构建......对吧?!?我如何让它做到这一点?

4

0 回答 0