Reputation: 160
I have a FilteringSelect in a form and I want to get it options in order to do an alphabetical insertion of a new option.
The FilteringSelect element is:
<select name="inv_ext" id="inv_ext" data-dojo-type="dijit.form.FilteringSelect">
<option class="opt_inv_ext" value="1">Aaaaa, Aaa</option>
<option class="opt_inv_ext" value="2">Ccccc, Ccc</option>
</select>
And the Javascript code to get and proccess each option is:
dojo.query(".opt_inv_ext").forEach(function(opt, i, nodelist){
...
}
The goal is to insert the following node:
<option class="opt_inv_ext" value="3">Bbbbb, Bbb</option>
between the two existing ones using the label as the comparison value not the value attribute.
Any idea? Thanks in advance and sorry my english!
Upvotes: 1
Views: 6150
Reputation: 1
I resolved this problem as follows:
dijit.byId("select_id").store.root.add(dojo.create("option",{ value: "some", innerHTML: "label of option"}));
To remove the existing elements did just that:
var size = dijit.byId("select_id").store.root.removeChild.length;
for(var i=size; i>=0; i--){
dijit.byId("select_id").store.root.removeChild(dijit.byId("select_id").store.root.children[size-1]);
}
Upvotes: -1
Reputation: 6828
It's easy to do if you use a store to back your list. I assume you use dojo 1.6>. Here is an example :
-In your HTML :
<input id="inv_ext">
-In javascript :
var store = new dojo.store.Memory({
data : [
{ type : 'options', value : 1, text : 'Aaaaa, Aaa' },
{ type : 'options', value : 2, text : 'Ccccc, Ccc' },
]
});
dojo.ready(function(){
var filteringSelect = new dijit.form.FilteringSelect({
id: "inv_ext",
name: "inv_ext",
store: store,
searchAttr : 'text',
query : {
type : 'options'
},
fetchProperties : {
sort : [ { attribute : "text" } ]
}
}, "inv_ext");
store.put({ type : 'options', value : 3, text : 'Bbbbb, Bbb' });
});
Upvotes: 5