DataList.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. define("dijit/form/DataList", [
  2. "dojo/_base/declare", // declare
  3. "dojo/dom", // dom.byId
  4. "dojo/_base/lang", // lang.trim
  5. "dojo/query", // query
  6. "dojo/store/Memory", // dojo.store.Memory
  7. "../registry" // registry.add registry.remove
  8. ], function(declare, dom, lang, query, MemoryStore, registry){
  9. // module:
  10. // dijit/form/DataList
  11. // summary:
  12. // Inefficient but small data store specialized for inlined data via OPTION tags
  13. function toItem(/*DOMNode*/ option){
  14. // summary:
  15. // Convert <option> node to hash
  16. return {
  17. id: option.value,
  18. value: option.value,
  19. name: lang.trim(option.innerText || option.textContent || '')
  20. };
  21. }
  22. return declare("dijit.form.DataList", MemoryStore, {
  23. // summary:
  24. // Inefficient but small data store specialized for inlined data via OPTION tags
  25. //
  26. // description:
  27. // Provides a store for inlined data like:
  28. //
  29. // | <datalist>
  30. // | <option value="AL">Alabama</option>
  31. // | ...
  32. constructor: function(/*Object?*/ params, /*DomNode|String*/ srcNodeRef){
  33. // store pointer to original DOM tree
  34. this.domNode = dom.byId(srcNodeRef);
  35. lang.mixin(this, params);
  36. if(this.id){
  37. registry.add(this); // add to registry so it can be easily found by id
  38. }
  39. this.domNode.style.display = "none";
  40. this.inherited(arguments, [{
  41. data: query("option", this.domNode).map(toItem)
  42. }]);
  43. },
  44. destroy: function(){
  45. registry.remove(this.id);
  46. },
  47. fetchSelectedItem: function(){
  48. // summary:
  49. // Get the option marked as selected, like `<option selected>`.
  50. // Not part of dojo.data API.
  51. var option = query("> option[selected]", this.domNode)[0] || query("> option", this.domNode)[0];
  52. return option && toItem(option);
  53. }
  54. });
  55. });