web-dev-qa-db-ja.com

ExtJはComboBoxで選択イベントを起動しませんでした

ExtJs comboboxに問題があります。comboboxselectイベントに4つのアイテムとコールバック関数があるcomboboxがあると考えてください。

comboboxで選択した値をsetValue()で設定しようとすると、ExtJがselectイベントを発生させません。

この問題を解決するにはどうすればよいですか?

setValue()の後でこのイベントを自分で起動する必要がありますか?

19

その1年前に、煎茶サポートがそのことを言ったことをお話しします。

まあ、イベントは定義上、ユーザーアクションによってトリガーされる関数呼び出しであり、selectを呼び出すときにユーザーアクションはありません。

とにかく、「修正」は簡単です。selectを呼び出すことを知っているので、selectを呼び出した直後に、selectリスナー関数を呼び出すことができます。

それはあなたが何をすべきかあなたのケースに依存します。私にとっては、担当のメソッドを呼び出すことができるように実装をハングアップしましたが、その一方で、自分でイベントを発生させてもマイナス面は見られません。だからあなたがもっと好きなアプローチはあなた次第だと思います。

これは、自分でイベントを起動する方法の例です(一部コメント @ JohanHaest から)

簡単にするために、単一の選択のみが有効になっていると言います

var record = combo.store.getById(id);
combo.select(id);
combo.fireEvent('select', combo, record);

または

combo.select(model);
combo.fireEvent('select', combo, model);

現在のリリース(4.1.3)では、selectメソッドの2番目の引数をtrue。これにより、ソースコードに応じて、selectイベントが発生します。ただし、最初の引数はモデルインスタンスである必要があります。

// source-snipped
select: function(r, /* private */ assert)

それで

combo.select(model, true);

selectイベントを発生させますが、この動作はいつでも(バージョン)変更される可能性があるため、アサートはプライベートとしてマークされます

19
sra

コンボボックスでvalueFieldを誤って使用していたため、これに遭遇しました...これが何をするのかはわかりませんが、正しく設定していない場合、コンボボックスが壊れます-changeイベントがまったく発生しないようにし、selectイベントが2回以上発生しないようにします。

私の推測では、同じアイテムを表す複数のオブジェクトをリストに含めることができ、valueFieldがキーを表すので、誤って設定すると、キーはすべてに対して未定義になり、したがってすべてに対して同じになります。つまり、最初のセットが新しい値としてカウントされた後は何も意味しません。

それはかなりニッチな振る舞いのようで(私が望んでいたものではないようです)、私の場合はそれを取り除いただけで、物事は機能し始めました。


また、私はあなたが望むイベントはchangeイベントだと思います- ドキュメント (4.1の場合)は言う

Fires when the value of a field is changed via the setValue method.

一方、selectは、誰かがコンボボックスをクリックしたときにのみ起動します

余談ですが、このためにイベントを使用することについても質問します。setValueを呼び出したことがわかっているので、set valueを呼び出した後に、実行したいことだけを実行してみませんか。イベントはコードをより混乱させる傾向があり、マルチキャストが必要ない場合は、通常、それらに煩わされない方が良いでしょう。

3
JonnyRaa