19

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

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

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

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

4

2 に答える 2

21

1 年前に sencha サポートが言ったことをお伝えできます。

イベントは、定義上、ユーザー アクションによってトリガーされる関数呼び出しであり、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);

メソッドの 2 番目の引数を に設定すると、現在のリリース (4.1.3) でハッキングされる可能性があります。これにより、ソースコードによると、選択イベントが発生します。ただし、最初の引数は Model インスタンスでなければなりません。selecttrue

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

そう呼ぶ

combo.select(model, true);

選択イベントが発生しますが、この動作はいつでも変更される可能性があります (バージョン) アサートが非公開としてマークされているため

于 2013-01-10T07:53:08.010 に答える