1

この評価クラスExt.ux.touch.ratingを使用する Sencha Touch 2 ビューがあり、2 つのインスタンスがあります。

{
    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 の名前が少し異なります) を有効にしようとしています。

最初のリスナーのみが接続されている場合、問題なく動作します (2 番目の評価の変更に対するアクションがない場合を除く)。console.log(this) または console.log(this.parent) または Ext.getCmp('ratingBtn') を使用して 2 番目のリスナーをアタッチすると、アプリは正常にビルドされます。

しかし、要素で setDisabled() を呼び出そうとすると (これは 2 番目のリスナーでのみ発生します... 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