以前dijit.form.ComboBoxに渡す、dojo.data.ItemFileReadStoreの内容について、わからないまま適当にやっちゃったのですが、最近になって調べてみましたのでメモっておきます。
var tStore = new dojo.data.ItemFileReadStore({url: "./comboboxdata.php"});
<input dojoType="dijit.form.ComboBox" id="sel" store="tStore" />
などとして、dijitのComboBoxに使うリストデータを指定するわけですが、dojo.data.ItemFileReadStoreが受け取るJSONの形式についてこのページの説明によると、
{ "identifier": "name", "label": "lv", "items": [ {"name": "北海道", "lv": "hokkaidou"}, {"name": "東北", "lv": "touhoku"}, {"name": "関東", "lv": "kantou"} ] }
という風になります。ここで、トップにあるitentifierはitemsにおけるユニークとなる識別子があれば指定し、無しでもいいです。labelもitemsにおいて人が読んでわかるラベルで、無しでもよい。とのことなので、ComboBoxに渡す形式としては、
{ "items": [ {"name": "北海道"}, {"name": "東北"}, {"name": "関東"} ] }
で十分ということになります。ここで、キー名としてnameを使っていますが、これは、ComboBoxのsearchAttrの対象がデフォルトでnameだからです。すなわち、nameの代わりに
<input dojoType="dijit.form.ComboBox" id="sel" store="tStore" searchAttr="chimei" />
などとすれば、
{ "items": [ {"chimei": "北海道"}, {"chimei": "東北"}, {"chimei": "関東"} ] }
のJSONデータでもOKということになります。
ComboBoxで表示されるラベルと、値を別にする方法ですが、
<input dojoType="dijit.form.ComboBox" id="sel" store="tStore" labelAttr="label" />
と、labelAttrを設定して、
{ "items": [ {"name": "kyusyuu", "label": "九州"}, {"name": "shikoku", "label": "四国"}, {"name": "chugoku", "label": "中国"} ] }
とすれば、表示はlabelの内容で、値はnameの内容で。という具合にできることがわかりました。ただし、選択後、TextBoxに入って表示される値はnameの値になりますけど。