{"id":51,"date":"2011-06-23T15:26:48","date_gmt":"2011-06-23T13:26:48","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=51"},"modified":"2011-06-23T16:14:32","modified_gmt":"2011-06-23T14:14:32","slug":"dojos-stolpersteine","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=51","title":{"rendered":"Dojo&#8217;s Stolpersteine"},"content":{"rendered":"<p>Das Dojo Toolkit enth\u00e4lt jede Menge interessanter und n\u00fctzlicher Funktionen, z.B. <a title=\"Dojo Toolkit Referenz: dojo.fieldToObject()\" href=\"http:\/\/dojotoolkit.org\/reference-guide\/dojo\/fieldToObject.html\" target=\"_blank\">dojo.fieldToObject()<\/a>. Die Funktion ist sehr praktisch, da sie die Inhalte eines beliebigen Feldes in einen String bzw. einen Array konvertiert, ohne da\u00df man sich um den Feldtyp k\u00fcmmern mu\u00df.<\/p>\n<p>Es gibt nur eine Besonderheit zu beachten: Zwar wird das jeweilige HTML-Element \u00fcber die id referenziert, doch aus mir unerkl\u00e4rlichen Gr\u00fcnden (siehe unten) mu\u00df bei dem jeweiligen Feld das name-Attribut gesetzt sein, sonst liefert die Funktion null zur\u00fcck.<\/p>\n<pre>&lt;input type=\"text\" <strong>id=\"ID\"<\/strong> value=\"VALUE\" <span style=\"color: #ff0000;\"><strong>name=\"NAME\"<\/strong><\/span> \/&gt;\r\n\r\n&lt;script type=\"text\/javascript\"&gt;\r\n dojo.addOnLoad( function(){\r\n var f = dojo.fieldToObject(<strong>\"ID\"<\/strong>);\r\n alert( f );\r\n });\r\n&lt;\/script&gt;<\/pre>\n<p><em>[Fett hervorgehoben: id \u00fcber die referenziert wird, und das n\u00f6tige name-Attribut in rot.]<\/em><\/p>\n<p>Dieses Verhalten ist bei allen Dojo-Varianten gleich (aktuelle Version 1.6).<\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"text-decoration: underline;\">Warum ist das so?<\/span><\/h4>\n<p>Wirft man einem Blick auf die Implementierung der Funktion, so wird das name-Attribut vorausgesetzt, sonst wird das Item nicht vearbeitet:<\/p>\n<pre>dojo.fieldToObject = function(\/*DOMNode||String*\/ <strong>inputNode<\/strong>){\r\n \/\/ summary:\r\n \/\/\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 Serialize a form field to a JavaScript object.\r\n \/\/\r\n \/\/ description:\r\n \/\/\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 Returns the value encoded in a form field as\r\n \/\/\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 as a string or an array of strings. Disabled form\r\n \/\/        elements and unchecked radio and checkboxes are skipped. \r\n \/\/        Multi-select elements are returned as an array of string\r\n \/\/        values.\r\n var ret = null;\r\n var item = <strong>_d.byId(inputNode);<\/strong>\r\n if(item){\r\n <span style=\"color: #ff0000;\"><strong>var _in = item.name;<\/strong><\/span>\r\n var type = (item.type||\"\").toLowerCase();\r\n if(<span style=\"color: #ff0000;\"><strong>_in<\/strong><\/span> &amp;&amp; type &amp;&amp; !item.disabled){\r\n if(type == \"radio\" || type == \"checkbox\"){\r\n if(item.checked){ ret = item.value }\r\n }else if(item.multiple){\r\n ret = [];\r\n _d.query(\"option\", item).forEach(function(opt){\r\n if(opt.selected){\r\n ret.push(opt.value);\r\n }\r\n });\r\n }else{\r\n ret = item.value;\r\n }\r\n }\r\n }\r\n return ret; \/\/ Object\r\n }<\/pre>\n<p><em>[Fett hervorgehoben: Die Referenzierung erfolgt die Dojo-interne Funktion <a title=\"Dojo Toolkit Referenz: dojo.byId()\" href=\"http:\/\/dojotoolkit.org\/reference-guide\/dojo\/byId.html\" target=\"_blank\">dojo.byId<\/a>. In Rot die \u00dcberpr\u00fcfung des name-Attributes.]<\/em><\/p>\n<p>In meinen Augen gibt es keinen Grund f\u00fcr diese \u00dcberpr\u00fcfung bzw. das Abbrechen, wenn kein name-Attribut vorhanden ist. \u00c4ndert man die Funktion ab und wirft diese \u00dcberpr\u00fcfung raus, bereitet das keinerlei Probleme.<\/p>\n<p>Was auch immer sich die Entwickler hierbei gedacht haben, der Sinn erschlie\u00dft sich mir leider nicht. Aber ich lassen mich gerne eines besseren belehren&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Dojo Toolkit enth\u00e4lt jede Menge interessanter und n\u00fctzlicher Funktionen, z.B. dojo.fieldToObject(). Die Funktion ist sehr praktisch, da sie die Inhalte eines beliebigen Feldes in einen String bzw. einen Array konvertiert, ohne da\u00df man sich um den Feldtyp k\u00fcmmern mu\u00df. &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=51\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,75,9],"tags":[8,7,4,12,3],"class_list":["post-51","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-dojo","category-javascript","tag-dojo","tag-domino","tag-js","tag-web","tag-xpages"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=51"}],"version-history":[{"count":14,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":56,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/51\/revisions\/56"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}