0

extjsActionボタンのハンドラーは、次のコードで関数を呼び出します。

  Add: function() {
        var window = Ext.getCmp('wndAdd');
        window.items.items[0].getStore().reload;
        var Grid1 = Ext.getCmp('grdAll');

        var grdStore2 = Ext.getCmp('grid2').getStore();
        var i = 0;
        var IDList = new Array();
        for (i = 0; i < grdStore2.data.length; i++) {

               IDList[i] =
               grdStore2.data.items[i].data['ID'];

        }

        Grid1.getView().getRowClass = function(record, index) {

            if (IDList.contains(record.data["ID"])) {
                return 'disabled-row';
            }
        };

        window.show();

    }

ただし、getRowClass関数は、最初のボタンクリックでのみ機能します。追加される行を無効にしませんか。

4

4 に答える 4

2

getRowClassは1回だけ割り当てる必要があります。これは、呼び出す関数ではなく、行がレンダリングされるたびにグリッドによって内部的に呼び出される関数です。イベント処理関数内で割り当てるのではなく、アプリケーションレベルのどこかに1回割り当てる必要があります(たとえば、Grid1自体が最初に構成されている場所が最も論理的な場所です)。Add関数がどのように呼び出されるかによって、これが問題になる場合とそうでない場合がありますが、これは明確ではありません。getRowClass内のIDListに依存しているため、関数が存在するスコープ内にある変数への参照も必要であり、アクセスする前に有効であることを確認するためのチェックを追加する必要があることに注意してください。それ。

また、Grid1が再レンダリングされる場所も表示されていません。上で説明したように、getRowClassは行がレンダリングされたときにのみ実行されるため、コードに示されていない場所でGrid1を更新しない限り、getRowClassが呼び出されることはありません。

于 2009-05-27T05:35:18.053 に答える
1

参考までに、あなたがあなたのために働く解決策を見つけてくれてうれしいですが、あなたがまだgetRowClassを理解しているかどうかはわかりません。一度だけ呼び出されるわけではありません。グリッド行が再レンダリングされるたびに(データが変更されるたびに)呼び出されます。コードが正しく設定されていなかったため、コード内で1回だけ呼び出されていました。

ユースケースを完全には理解していませんが、表示されているウィンドウに関係なく、グリッドの基になるデータが実際に変更された場合にのみ、行のストライピングを変更する必要があります。getRowClass関数を適切に設定すると、グリッドが必要なときに自動的に呼び出しを行い、「正常に機能する」はずです。余分なオーバーヘッドを追加するだけで書かれた反復コードは必要ありません。

繰り返しますが、参考までに。:)

于 2009-06-12T19:55:25.447 に答える
1

はい、グリッドが構成されている場合、getRowClassは1回だけ呼び出されます。しかし、window.show()が起動されるたびに起動するものが必要でした。window.onshowイベントで以下のコードを使用しました。

for (var i = 0; i < Grid1.getStore().data.length; i++) {
    var element = Ext.get(Grid1.getView().getRow(i));
    var record = Grid1.getStore().getAt(i);
    if (IdList.contains(record.data.ID)) {
        element.addClass('disabled-row')
    } else {
        element.removeClass('disabled-row')
    }
}
于 2009-06-12T18:42:38.493 に答える
0

詳細情報が提供されたら、適切な回答で回答を編集します。

getRowClassをいつ起動しますか?関数を作成しているように見えますが、実際に応答を要求することはありません。

関数はエラーになりますか、まったく呼び出されませんか、それとも単にあなたが望むことをしませんか?

于 2009-05-27T04:06:06.303 に答える