3

時折、Ext Js 4.2.1 無限スクロール グリッドから「PageMap が持っていない範囲を要求しました」という例外が発生します。もちろん、存在しないエントリを要求するべきではありませんが、これはフレームワーク自体によって行われることがあります。レコードの追加/削除またはグリッドのリロードに何らかの形で接続されているようです。Sencha フォーラムには、このトピックに関するいくつかのスレッドが既にあります (例: this ) が、キラー ソリューションやバグ修正はまだ提案されていません。

その間、この例外をユーザーの目から遠ざけておかなければなりません。そうするための良い方法は何ですか?トリッキーなことは、ユーザーがスクロールバーを動かすだけで引き起こされることがあるため、コードの1行が直接関与していないことです。

4

3 に答える 3

4

根本的な原因は、行をレンダリングするときに、選択した行の前にあるかどうかを判断することであることがわかりました。最後の行で作業している場合でも、行 + 1 を探します (4.2.1 の Ext.view.Table:931)。

私の簡単な解決策は、false を返すようにすることです。

Ext.override(Ext.selection.RowModel,
{
    isRowSelected: function (record, index)
    {
        try
        {
            return this.isSelected(record);
        }
        catch (e)
        {
            return false;
        }
    }
});
于 2013-08-16T19:37:14.583 に答える
0

これらのコードはすべて機能しません。多くのデバッグの後、問題を解決するこのオーバーライドを作成しました。



Ext.define('overrides.LruCache', {

    override: 'Ext.util.LruCache',

    // private. Only used by internal methods.
    unlinkEntry: function (entry) {
        // Stitch the list back up.
        if (entry) {
            if (this.last && this.last.key == entry.key)
                this.last = entry.prev;
            if (this.first && this.first.key == entry.key)
                this.first = entry.next;

            if (entry.next) {
                entry.next.prev = entry.prev;
            } else {
                this.last = entry.prev;
            }
            if (entry.prev) {
                entry.prev.next = entry.next;
            } else {
                this.first = entry.next;
            }
            entry.prev = entry.next = null;
        }
    }


});
于 2014-04-28T17:47:58.167 に答える