1

やあみんな。

私はこのエラーを抱えており、数時間の間私を悩ませてきました。私はなんとか「理由」を見つけることができましたが、「それを修正する方法」を見つけるためにあなたの助けが必要です。

これは、「複雑な」レコードを編集するためのフォームです。

私のレイアウトは(簡単に言えば)次のようなものです:

    • タブパネル
      • panel1(デフォルト)
        • ..。
        • ..。
      • panel2
        • グリッド

フォームを作成したら、レコードの値をフォームにロードし、ロードしてグリッド上の行を選択します。これは、レコード内のネストされたストアのレコードに応じて行われます。

そして、私の問題は、グリッド(または選択モデル)にビューがないため(明らかに)、「未定義のプロパティ「長さ」を読み取れません」がスローされることです。

onSelectChange: function(record, isSelected, suppressEvent, commitFn) {
    var me      = this,
        views   = me.views,
        viewsLn = views.length, // HERE <-------------
        store   = me.store,
        rowIdx  = store.indexOf(record),
        eventName = isSelected ? 'select' : 'deselect',
        i = 0;
...

行を選択する前にタブを変更するのに十分な大きさのsetTimeoutを挿入すると、問題なく機能します。

だから、誰かがこれを修正する方法を知っていますか?もちろん、setTimeoutアプローチはオプションではありません:)

どうもありがとうございます。

4

2 に答える 2

1

問題は解決しました...グリッドのアフターレンダリングイベントで行を選択しただけです。

誰かを助けるかもしれません。

于 2011-12-22T00:09:43.247 に答える
1

独自のタイプのフォームフィールドを作成するためにExt.form.field.Fieldミックスインを追加するときに、この問題が発生しました。具体的には、グリッドがレンダリングされる前に関数が呼び出されていたため、選択の設定に失敗したことがわかりました。Ext.grid.PanelGridMultiSelectsetValue()

このsetValue()関数は、グリッドがレンダリングされる前と後の両方で呼び出される可能性があるため、これが私の解決策です。

if (this.rendered) {
    this.getSelectionModel().select(recordsToSelect);
} else {
    this.addListener('afterrender', function() {
        this.getSelectionModel().select(recordsToSelect);
    }, this, {
        single: true
    });
}

つまり、まだレンダリングされていない場合は、afterrenderイベントの1回限りのリスナーを作成し、選択を設定します。

于 2012-03-13T17:50:30.507 に答える