dijit.form.FilteringSelect
ユーザーがリージョンを選択できるようにするために、 に裏打ちされたを使用dojox.data.QueryReadStore
しています (「オートコンプリート」メカニズムを考えてください)。ユーザーが文字を入力するたびにQueryReadStore
、 はサーバーに要求を送信し、一致する領域の json リスト (関連付けられた ID を含む) を待ちます。十分に短いリストが表示されるまでに、ユーザーは目的の項目を選択します。[確かに、キーストロークごとにクエリを実行するのは最も効率的なパターンではありませんが、今のところは十分です。]
予期しない動作: まれではあるが特定の状況で、ユーザーが行った選択が「固執しない」場合があります。たとえば、ユーザーが「can
」と入力すると、次の選択肢がこの順序で表示されます。
Atlantic Canada
Canada
English Canada
Lower Canada
Upper Canada
Western Canada
彼女がCanada
これらの中から " " を選択した場合、dijit はドロップダウン選択を閉じ、彼女の選択を正しく選択します。しかし、ユーザーがフィールドを離れるまでに、選択は " " に切り替わりますAtlantic Canada
!
その奇妙な現象は、少数の特定の地域で体系的に発生します。(最初は、行儀の悪い地域に共通する要因は、名前にアクセント付きの文字やハイフンが含まれていることだと思っていましたが、カナダの例では明らかにそうではありませんでした。これまでのところ、規則的なパターンを見つけることができませんでした。)
同様の問題についての言及はどこにも見つかりませんでした。私は喜んで調査しますが、私は道場に慣れていないので、道場のコードの内部を詳しく調べる前に、ポインタをいただければ幸いです。最初にどこを見ればよいでしょうか? その動作を引き起こす可能性のある問題は何ですか? 特定の仮説を除外できますか? この問題を解決するには、コンソール (または Firebug) をどのように使用すればよいですか? 等
この問題は、dojo 1.1.1 と dojo 1.2.3 の両方で発生します。
の(プログラムによる)生成は次のFilteringSelect
とおりです。
new dijit.form.FilteringSelect({
name = "region";
autoComplete = false;
hasDownArrow = false;
labelAttr = "name";
queryExpr = "${0}";
store = new dojox.data.QueryReadStore({url:'/query/regions'});
}, myNode);
編集 (2009/02/18): 追加の詳細
ダメリンの答えに続いて、私FilteringSelect
はこの状況をどう見たのか理解したいと思いました。ロギング関数をFilteringSelect
のイベントonChange
とに接続するとonBlur
、次のプレイバイプレイ シーケンスが得られます。
- フィールドをクリックして、次のように入力します。
can
- 6 つのリージョン (上記) のドロップダウン リストが表示されます。
- キーボード カーソルを使用して、リストを下の "
Canada
" (ID 1 の領域)に移動します。 を押します
Enter
(したがって、ストアのアイテムを選択します)。ドロップダウン リストが消えて、テキスト "Canada
" がフィールドに表示されます。この時点で、最初のイベントが発生し、次のログが記録されます。onChange event: region 1
を押してフィールドを離れ
tab
ます。ここでは、次の順序で 2 つのイベントが次々に発生します。onBlur event: region 1 onChange event: region 246
(リージョン 246 はAtlantic Canada
です。) これは非常に興味深いことです... フィールド (onBlur) を離れるまでに、Canada
まだ選択された値です。謎の入れ替わりはその後…