<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Guggat emol Blog &#187; Wenn Firefox die Warnung &#8220;Die URL ist ungültig und kann nicht geladen werden&#8221; generiert</title>
	<atom:link href="http://www.baldenhofer.eu/blog/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.baldenhofer.eu/blog</link>
	<description>Roland bloggt über IT, Programmieren und Linux</description>
	<lastBuildDate>Tue, 25 Oct 2011 22:53:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Wenn Firefox die Warnung &#8220;Die URL ist ungültig und kann nicht geladen werden&#8221; generiert</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/wenn-firefox-die-warnung-die-url-ist-ungultig-und-kann-nicht-geladen-werden-generiert</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/wenn-firefox-die-warnung-die-url-ist-ungultig-und-kann-nicht-geladen-werden-generiert#comments</comments>
		<pubDate>Thu, 28 Jul 2011 12:21:16 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[drag&drop]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[Lösung]]></category>
		<category><![CDATA[warnung]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=2132</guid>
		<description><![CDATA[Wir hatten beim Drag&#38;Drop im JavaScript bei unserem Scrumboard das Problem gehabt, dass immer beim Verschieben die folgende Warnung ausgegeben wurde: Das geschah nur beim Firefox 4 und 5. Lösung Im Event-Handler hatten wir ursprünglich folgende Zeile eingetragen: e.dataTransfer.setData("Text", "js_draggedItem: "); + this.innerHTML) Wenn du den &#8220;Text&#8221; CamelCase mässig schreibst, dann kommt die Warnung. Wenn [...]]]></description>
			<content:encoded><![CDATA[<p>Wir hatten beim Drag&amp;Drop im JavaScript bei unserem <a href="http://scrum.miradlokit.org/">Scrumboard </a>das Problem gehabt, dass immer beim Verschieben die folgende Warnung ausgegeben wurde:</p>
<p><a href="http://www.baldenhofer.eu/blog/wp-content/uploads/2011/07/drag_and_drop_firefox5_warnung_text.png"><img class="alignnone size-full wp-image-2133" title="drag_and_drop_firefox5_warnung_text" src="http://www.baldenhofer.eu/blog/wp-content/uploads/2011/07/drag_and_drop_firefox5_warnung_text.png" alt="Drag and Drop Warnung im Firefox 4 und 5" width="431" height="138" /></a></p>
<p>Das geschah nur beim Firefox 4 und 5.</p>
<h3>Lösung</h3>
<p>Im Event-Handler hatten wir ursprünglich folgende Zeile eingetragen:</p>
<pre class="code">e.dataTransfer.setData("Text", "js_draggedItem: "); + this.innerHTML)</pre>
<p>Wenn du den &#8220;Text&#8221; CamelCase mässig schreibst, dann kommt die Warnung.</p>
<p>Wenn du dies umstellst auf:</p>
<pre class="code">e.dataTransfer.setData("TEXT", "js_draggedItem: "); + this.innerHTML)</pre>
<p>dann wird keine Warnung mehr geschrieben.</p>
<p>Mit CamelCase (Text) versucht der Firefox ein Redirect auf den dahinterliegenden Text zu machen.</p>
<p>Das ist irgendwie doof aber er macht es halt <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>setData(FORMAT, DATA) darf also keine Groß-Kleinschreibung beinhalten.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/wenn-firefox-die-warnung-die-url-ist-ungultig-und-kann-nicht-geladen-werden-generiert/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debuggen von jQuery.ajax()-Responses in CakePHP</title>
		<link>http://www.baldenhofer.eu/blog/guggat_emol/debuggen-von-jquery-ajax-responses-in-cakephp</link>
		<comments>http://www.baldenhofer.eu/blog/guggat_emol/debuggen-von-jquery-ajax-responses-in-cakephp#comments</comments>
		<pubDate>Thu, 14 Jul 2011 22:53:56 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Guggat emol]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=2087</guid>
		<description><![CDATA[Ich habe mit jQuery.ajax() ein JSON Objekt an den Server übermittelt. Zuerst musste ich herausfinden, in welchen Parametern CakePHP diesen Request ablegt. Ich wurde in $this-&#62;params['form'] fündig Also, jQuery Requests landen bei CakePHP in $this-&#62;params['form']. Jetzt wollte ich den Response vom Server irgendwie mal sichtbar machen um das JSON Objekt entsprechend im Browser auslesen und [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mit jQuery.ajax() ein JSON Objekt an den Server übermittelt.<br />
Zuerst musste ich herausfinden, in welchen Parametern CakePHP diesen Request ablegt.<br />
Ich wurde in <span class="“code“">$this-&gt;params['form']</span> fündig <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Also, jQuery Requests landen bei CakePHP in $this-&gt;params['form'].<br />
Jetzt wollte ich den Response vom Server irgendwie mal sichtbar machen um das JSON Objekt entsprechend im Browser auslesen und  verarbeiten zu können.<br />
Dazu erstellte ich im JavaScript folgenden Ablauf:</p>
<pre class="“code“">var send = new Array('Hallo', 'Paul');

jQuery.ajax({

   type:     'POST',

   url:      '/moc/mocs/save_graph',

   dataType: 'json',

   data: {

       val: send

   },

   cache:    false,

   success: function(serverResponse){

       //jQuery('#update').append(serverResponse);

       jQuery('#update').append("hallo
");

       jQuery('#update').append(serverResponse['val'][0]+"
"+serverResponse['val'][1]);

   },

   error: function(xhr, textStatus, errorThrown){

       alert('Fehler beim Server-Call '+(errorThrown ? errorThrown : xhr.status));

   }

});</pre>
<p>Irgendwelche Daten (hier ein Array mit <span class="“code“">send = new Array(&#8216;Hallo&#8217;, &#8216;Paul&#8217;)</span> werden jetzt an den Server gesendet. Der Server macht irgendwas damit und das Ergebnis wird im VIEW.ctp normalerweise als JSON Objekt kodiert.<br />
Also <em><span class="“code“">echo json_encode($data);</span></em><br />
Wenn das übermittelt wird, kannst du das JSON-Objekt nicht kurz anschauen.<br />
Du kannst aber auf dem Server kurz ein <em><span class="“code“">pr($data);</span> </em>eintragen. Dann schlägt der Error-Teil der oben abgebildeten Funktion zu.<br />
Du kannst dein Objekt schön formatiert in einem Alert-Element sehen.<br />
Ok, dieser Hack ist nicht sehr freundlich, aber bevor ich ewig rumgruschtel lass ich mir die Daten lieber kurz ausgeben&#8230;<br />
AJAX zu debuggen ist immer eine kleine Herausforderung, da die Daten ziemlich versteckt zwischen Client und Server ausgetauscht werden.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/guggat_emol/debuggen-von-jquery-ajax-responses-in-cakephp/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mit jQuery werden Objekte absolut verschoben</title>
		<link>http://www.baldenhofer.eu/blog/guggat_emol/mit-jquery-werden-objekte-absolut-verschoben</link>
		<comments>http://www.baldenhofer.eu/blog/guggat_emol/mit-jquery-werden-objekte-absolut-verschoben#comments</comments>
		<pubDate>Wed, 13 Jul 2011 22:01:49 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Guggat emol]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=2085</guid>
		<description><![CDATA[Auf dem Weg vom Bobbelgenerator zum Graphen-Editor muss ich natürlich irgendwann einmal meine Knoten nicht mehr einfach bei left=0, top=0 zuerst zeichnen, sondern ich muss die Knoten vom Server laden und gleich irgendwohin (relativ auf der Seite) positionieren. Und da hatte ich wieder mein Problem! Ich habe mindestens zwei Stunden gesucht warum meine Linien zwischen [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Auf dem Weg vom Bobbelgenerator zum Graphen-Editor muss ich natürlich irgendwann einmal meine Knoten nicht mehr einfach bei left=0, top=0 zuerst zeichnen, sondern ich muss die Knoten vom Server laden und gleich irgendwohin (relativ auf der Seite) positionieren.</p>
<h3 style="margin-bottom: 0cm">Und da hatte ich wieder mein Problem!</h3>
<p style="margin-bottom: 0cm">Ich habe mindestens zwei Stunden gesucht warum meine Linien zwischen den Kreisen irgendwo im Nirvana verliefen.</p>
<p style="margin-bottom: 0cm">Des Rätsels Lösung ist wieder mal ganz einfach.</p>
<p style="margin-bottom: 0cm">Die Startposition des gezeichneten Objektes muss bei jeder Verschiebung mit hinzugerechnet werden, da die Startposition sich relativ zum Zeichenfeld (also z.B. &lt;div id=“canvas“&gt;&lt;/div&gt;) liegt.</p>
<p style="margin-bottom: 0cm">Will heißen, dass du z.B. deinen Kreis bei 100,100 zuerst relativ setzt. jQuerys draggable() verschiebt dann den Kreis und setzt die absolute Position (zur oberen linke Ecke des DOM).</p>
<p style="margin-bottom: 0cm">Schon hart, erst fangen wir relativ an, dann stellen wir auf absolut um.</p>
<p style="margin-bottom: 0cm">Vielleicht finde ich noch einen Schalter um das auszuschalten. Aber bis dahin ist das halt so.</p>
<p style="margin-bottom: 0cm">Wenn du die neu verschobene Position nun abspeichern willst, musst du zuerst im style Element schauen ob dort ein position:absolute drin steht. Wenn dem so ist, dann wurde das Element verschoben und du musst von dieser Position noch die Position deiner Zeichenfläche abziehen.</p>
<p style="margin-bottom: 0cm">Dann sind die Positionen richtig und können wieder geladen werden.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/guggat_emol/mit-jquery-werden-objekte-absolut-verschoben/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weitere Schritte auf dem Weg zum MOC-Graphen-Editor</title>
		<link>http://www.baldenhofer.eu/blog/guggat_emol/weitere-schritte-auf-dem-weg-zum-moc-graphen-editor</link>
		<comments>http://www.baldenhofer.eu/blog/guggat_emol/weitere-schritte-auf-dem-weg-zum-moc-graphen-editor#comments</comments>
		<pubDate>Fri, 08 Jul 2011 22:17:41 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Guggat emol]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MOC]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=2055</guid>
		<description><![CDATA[Der Bobbelgenerator ist jetzt noch nicht so ganz eine vollständige Applikation mit der wir unsere MOC-Anforderungen abdecken können Da müssen wir wohl noch ein wenig mehr Funktionalität erstellen&#8230; Es ist schon mal cool, dass wir überhaupt ein paar Bobbels zeichnen können und uns anhand dieser Malereien über die nächsten Schritte unterhalten können. Ganz in SCRUM-Manier [...]]]></description>
			<content:encoded><![CDATA[<p>Der Bobbelgenerator ist jetzt noch nicht so ganz eine vollständige Applikation mit der wir unsere MOC-Anforderungen abdecken können <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Da müssen wir wohl noch ein wenig mehr Funktionalität erstellen&#8230;<br />
Es ist schon mal cool, dass wir überhaupt ein paar Bobbels zeichnen können und uns anhand dieser Malereien über die nächsten Schritte unterhalten können.<br />
Ganz in SCRUM-Manier haben wir also einen Sprint hinter uns und können nun entscheiden was wir im nächsten Schritt alles machen wollen.<br />
Auf meiner Wunschliste wären auf alle Fälle folgende Anwendungsfälle:</p>
<div id="attachment_2056" class="wp-caption alignnone" style="width: 453px"><img class="size-full wp-image-2056" title="moc_gui_anwendungsfaelle" src="http://www.baldenhofer.eu/blog/wp-content/uploads/2011/07/moc_gui_anwendungsfaelle.png" alt="Anwendungsfälle für MOC" width="443" height="375" /><p class="wp-caption-text">Anwendungsfälle für MOC</p></div>
<p>Ich möchte:</p>
<ul>
<li>Knoten hinzufügen können (ok, klappt schon)</li>
<li>Knoten Position auf Bildschirm setzen (ok, klappt schon)</li>
<li>Knoten Texte einschreiben Hier möchte ich in Abhängigkeit des Problemfalls unterschiedliche Inhalte eintragen können. So soll bei einem Gozinthographen Fix- und Variable- Kosten eingetragen werden können. Weiter Anzahl und Beschreibung. Bei einem Incident brauchen wir eine Beschreibung wer das wie reparieren kann.</li>
<li>Knoten löschen (geht noch nicht <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</li>
<li>Knoten und Positionen der Knoten laden und speichern. Ich möchte noch nicht super viel Suchen und Finden Funktionalität einbauen. Aber unsere Skizzen mal kurz speichern zu können wäre schon irgendwie schön. Dann können wir etwas beschreiben, speichern, laden, darüber reden und weitere Ideen umsetzen.</li>
<li>Link Stereotype setzen. Fände ich schon schick wenn wir unterschiedliche Links (später auch unterschiedliche Knoten) anlegen könnten. So kann ein Link für Fix-Kosten verantwortlich sein. Ein anderer Link ist für eine Reporting-Line zuständig.</li>
<li>Knoten miteinander verbinden (ok, klappt schon)</li>
<li>Wenn jemand mein Layout und Design nervt, darf da natürlich auch gerne ein bisschen das Look-And-Feel verbessert werden. Ich bin eine grafische Katastrophe und kümmere mich nicht darum. Und zwar aus dem einfachen Grund, weil ich es nicht kann.</li>
</ul>
<p>Wenn wir die Häppchen umgesetzt haben, können wir wieder etwas mehr diskutieren und uns an das eigentliche Problem herantasten. Die Problemstellung bleibt überschaubar und wir planen nicht für eine Zukunft die es so nie geben wird <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Was wir auf alle Fälle noch machen müssen</p>
<ul>
<li>Wir brauchen das Source-Repository (GIT oder so&#8230;)</li>
<li>Wir brauchen unsere MOC Webseite umd Erkenntnisse zu dokumentieren</li>
<li>Ich fände ein KANBAN-Board voll cool auf dem wir eintragen können was wir so basteln wollen und wer gerade an was dran ist. Im ersten Schritt könnten wir auch das SCRUM-Board von miradlo verwenden. Da kann man auch schieben <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Die Startseite für unseren Webauftritt sollten wir festlegen und freischalten. Irgendein Text und ein Bildchen, oder einfach unseren Bobbelgenerator, sollten wir dort darstellen</li>
</ul>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/guggat_emol/weitere-schritte-auf-dem-weg-zum-moc-graphen-editor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Bobbelgenerator JavaScript Teil</title>
		<link>http://www.baldenhofer.eu/blog/moc/der-bobbelgenerator-javascript-teil</link>
		<comments>http://www.baldenhofer.eu/blog/moc/der-bobbelgenerator-javascript-teil#comments</comments>
		<pubDate>Thu, 07 Jul 2011 22:12:55 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[MOC]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=2053</guid>
		<description><![CDATA[Um den Bobbelgenerator zum Leben zu erwecken habe ich folgendes JavaScript zusammengebastelt: /** Counter how many circles currently available. */ var currentCircleCounter = 0; /** Counter how many lines currently available. */ var currentLineCounter = 0; /** The radius of the circles. */ var radius = 60; /** * Adds a new line. */ function [...]]]></description>
			<content:encoded><![CDATA[<p>Um den Bobbelgenerator zum Leben zu erwecken habe ich folgendes JavaScript zusammengebastelt:</p>
<pre class="code">/** Counter how many circles currently available. */
var currentCircleCounter = 0;
/** Counter how many lines currently available. */
var currentLineCounter = 0;

/** The radius of the circles. */
var radius = 60;
/**
 * Adds a new line.
 */
function addLine(){
    currentLineCounter++;
    var newLine =  '&lt;div id="line_div_'+currentLineCounter+'"&gt;'+"\n"
                  +'    &lt;input id="input_circle_start_'+currentLineCounter+'" /&gt;'+"\n"
                  +'    &lt;input id="input_circle_end_'+currentLineCounter+'" /&gt;'+"\n"
                  +'&lt;/div&gt;'+"\n";
    canvasLine = jQuery(newLine);

    canvasLine.appendTo("div#all_input_lines");
}

/**
 * Sets all lines defined between the circles.
 */
function setLines(){
    jQuery(function(){
        jQuery('#all_lines div').remove();
        //Create jsColor object
        var col = new jsColor("blue");
        //Create jsPen object
        var pen = new jsPen(col,3);
        // Find the position (left and top) within the div-containers.
        // TODO didn´t work absolute correct...
        var currentLeftDivPosition = currentTopDivPosition = 0;
        obj = document.getElementById('all_lines');
        currentLeftDivPosition += obj.offsetLeft;
        currentTopDivPosition += obj.offsetTop;
        if (obj.offsetParent) {
            obj = obj.offsetParent;
            do{
                currentLeftDivPosition += obj.offsetLeft;
                currentTopDivPosition += obj.offsetTop;
            }while(obj = obj.offsetParent);
        }
        // The circles, connected together, are within the input_circle_start_&lt;ID&gt;
        // and the input_circle_end_&lt;ID&gt; elements defined.
        var counter = 1;
        var inputCircleStart = jQuery('#input_circle_start_'+counter);
        var inputCircleEnd   = jQuery('#input_circle_end_'+counter);
        while(inputCircleStart.length &gt; 0){

            newLineText = '&lt;div id="line_'+counter+'"&gt;&lt;/div&gt;';
            var newLine = jQuery(newLineText);
            // Add the double click message.
            newLine.bind('dblclick', {id:currentLineCounter}, function(e){
                jQuery('#current_selected_line_text').text("Derzeitig selektiert ist Linie: "+e.data.id);
            });
            newLine.appendTo("div#all_lines");
            // Do line.
            newLine = document.getElementById('line_'+counter);
            var gr = new jsGraphics(newLine);

            var circleStart = jQuery('#circle_'+inputCircleStart.val());
            var circleEnd = jQuery('#circle_'+inputCircleEnd.val());

            var pt1 = new jsPoint(parseInt(circleStart.css('left'))+currentLeftDivPosition, parseInt(circleStart.css('top'))+currentTopDivPosition);
            var pt2 = new jsPoint(parseInt(circleEnd.css('left'))+currentLeftDivPosition, parseInt(circleEnd.css('top'))+currentTopDivPosition);
            pointDiv = gr.drawLine(pen, pt1, pt2);
            counter++;
            inputCircleStart = jQuery('#input_circle_start_'+counter);
            inputCircleEnd   = jQuery('#input_circle_end_'+counter);
        }
    });
}

/**
 * Adds a new circle.
 */
function addCircle(){
    jQuery(function(){
        currentCircleCounter++;
        var circleDiv = '&lt;div id="circle_'+currentCircleCounter+'" class="draggable" onmouseup="setLines();"&gt;&lt;/div&gt;';
        var newCircle = jQuery(circleDiv).draggable();
        newCircle.appendTo("div#all_circles");
        // Add the double click message.
        newCircle.bind('dblclick', {id:currentCircleCounter}, function(e){
            jQuery('#current_selected_circle_text').text("Derzeitig selektiert ist Knoten: "+e.data.id);
        });

        var current_x_position = 0;
        var current_y_position = 0;

        var circleDiv = document.getElementById('circle_'+currentCircleCounter);
        var gr = new jsGraphics(circleDiv);

        //Create jsColor object
        var col = new jsColor("red");

        //Create jsPen object
        var pen = new jsPen(col,3);
        // Draw the current selected part of the picture.
        var pt1 = new jsPoint(current_x_position, current_y_position);
        var pt2 = new jsPoint(current_x_position-8*5, current_y_position-5);
        gr.fillCircle(col, pt1, radius);
        gr.drawText('Bobbel '+currentCircleCounter, pt2);
    });
}</pre>
<p>Der Bobbelgenerator hat zwei globale Variablen (currentCircleCounter und currentLineCounter) mit denen ich die aktuell dargestellten Bobbels und Linien indexieren kann.<br />
Ein Kreis / eine Linie wird im DOM jeweils als ein DIV eingetragen. Damit ich die Linien und Kreise später wieder ansprechen kann, bekommen sie die Ids circle_&lt;currentCircleCounter&gt; und line_&lt;currentLineCounter&gt;.<br />
Wenn ein neuer Bobbel angelegt wird, wird dieser mit der Funktion addCircle() im DOM eingeschrieben.<br />
Dort wird ein neues DIV angelegt, der currentCircleCounter um eins erhöht und mit  jsDraw2D in das neu angelegte DIV der Kreis hineingezeichnet.<br />
Das DIV selbst wird mit jQuery angelegt und mit der Methode .draggable() ausgestattet.<br />
Weiter hänge ich noch einen dblclick-Event an das DIV damit der Knoten später entsprechend selektiert werden kann.<br />
Eine neue Linie wird angelegt, indem zwei input-Felder generiert werden mit denen der Start- und Endknoten angegeben werden kann.<br />
Dies erledigt die addLine()-Methode.<br />
Im Prinzip macht diese Methode das Gleiche wie die addCircle()-Methode. Außer dass sie nur zwei Eingabefelder und keine Kreise zeichnet <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ok, sie fügt auch keinen dblclick-Event an, da wir nachher die Linie selbst und nicht die Eingabefelder anklicken wollen.<br />
Wenn nun z.B. zwei Bobbels vorhanden sind können diese über eine Linie verbunden werden.<br />
Im Moment habe ich noch keine Sicherheitsüberprüfungen drin. Jeder Anwender kann so viele Linien zeichnen wie er oder sie will.<br />
Ich habe nur dafür Sorge getragen, dass keine Fehler entstehen.<br />
Man kann leere Linien eintragen, Texte anstatt ids und falsche ids.<br />
Wenn keine Knoten mit den betreffenden Ids verfügbar sind, dann wird halt nichts angezeigt.<br />
Das Setzen der Linien ist eine recht teure Angelegenheit.<br />
Wenn ein Knoten verschoben wurde, müssen alle Linien neu positioniert werden.<br />
Dazu lösche ich zuerst mit jQuery(&#8216;#all_lines div&#8217;).remove(); alle alten Linien weg.<br />
Dann lege ich alle Linien neu an indem ich durch die input-Felder wandere und die aktuellen Ids auslese.<br />
<strong>Was nicht besonders toll funktioniert ist die Bobbels und Linien an andere Positionen im DOM anzulegen. Die Überprüfung, der aktuellen Top-Position funktioniert nicht gut.<br />
Wenn da jemand eine bessere Idee hat, bitte melden!</strong><br />
Weiter werden die Positionen von den Kreisen ausgelesen.<br />
Mit den Positionen der zu verbindenden Kreisen werden die Linien gezeichnet und an das entsprechende DIV die Events angehängt.<br />
Tja, und das war es schon.<br />
Jetzt können wir zumindest mal Bobbels malen und darüber diskutieren was für Funktionalität hier tatsächlich benötigt wird.<br />
Prototyping ist doch eine feine Sache <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/moc/der-bobbelgenerator-javascript-teil/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Bobbelgenerator Anforderungen und HTML-Dokument</title>
		<link>http://www.baldenhofer.eu/blog/moc/der-bobbelgenerator-anforderungen-und-html-dokument</link>
		<comments>http://www.baldenhofer.eu/blog/moc/der-bobbelgenerator-anforderungen-und-html-dokument#comments</comments>
		<pubDate>Wed, 06 Jul 2011 12:12:13 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[MOC]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=2050</guid>
		<description><![CDATA[Für unser Management of Change werden wir früher oder später eine Eingabemöglichkeit für die Knoten und Verbindungen benötigen. Damit wir einfacher diskutieren können, habe ich kurz so eine Eingabemöglichkeit skizziert. Funktionale Anforderungen Es müssen beliebig viele Knoten angelegt werden können Es müssen zwischen allen Knoten (gerichtete) Verbindungen angelegt werden können Die Knoten sollen auf dem [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Für unser <strong>Management of Change </strong>werden wir früher oder später eine Eingabemöglichkeit für die Knoten und Verbindungen benötigen.<br />
Damit wir einfacher diskutieren können, habe ich kurz so eine Eingabemöglichkeit skizziert.</p>
<h3 style="margin-bottom: 0cm">Funktionale Anforderungen</h3>
<ul>
<li>Es müssen beliebig viele Knoten angelegt werden können</li>
<li>Es müssen zwischen allen Knoten (gerichtete) Verbindungen angelegt werden können</li>
<li>Die Knoten sollen auf dem Zeichenblatt frei verschiebbar sein</li>
<li>Knoten und Verbindungen müssen gelöscht werden können</li>
<li>Wenn ein Knoten oder eine Verbindung angeklickt wird, müssen die notwendigen Texte und Berechnungen eingefügt werden können</li>
</ul>
<h3 style="margin-bottom: 0cm">Nichtfunktionale Anforderungen</h3>
<ul>
<li>Ich möchte dass die Zeichnerei auf einem Standard-Webbrowser funktioniert</li>
<li>Es sollen nur HTML und JavaScript vorausgesetzt werden</li>
</ul>
<p style="margin-bottom: 0cm">So, damit sind die Anforderungen klar.</p>
<p style="margin-bottom: 0cm">Das vorläufige Ergebnis könnt ihr unter <a href="http://www.baldenhofer.eu/bobbel/">DER BOBBELGENERATOR </a>bewundern <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="margin-bottom: 0cm">Ich habe mich für jQuery und jsDraw2D entschieden um die Bobbels zu zeichnen und verschieben.</p>
<p style="margin-bottom: 0cm">Das dazugehörende HTML-Dokument sieht so aus:</p>
<pre class="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;title&gt;Bobbel Generator&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;Der Bobbelgenerator&lt;/h1&gt;
        &lt;p&gt;Mit dem Bobbelgenerator können für MOC Knoten erstellt und mit Linien verbunden werden&lt;/p&gt;
        &lt;p id="current_selected_circle_text"&gt;Noch kein Knoten selektiert.&lt;/p&gt;
        &lt;p id="current_selected_line_text"&gt;Noch keine Linie selektiert.&lt;/p&gt;
        &lt;form action=""&gt;
            &lt;div&gt;
                &lt;input id="new_circle" type="button" value="Neuer Bobbel" onclick="addCircle();" /&gt;
                &lt;input id="new_line" type="button" value="Neue Linie" onclick="addLine();" /&gt;
            &lt;/div&gt;
        &lt;/form&gt;
        &lt;div id="all_input_lines"&gt;&lt;/div&gt;
        &lt;div id="canvas"&gt;
            &lt;div id="all_lines"&gt;&lt;/div&gt;
            &lt;div id="all_circles"&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;script type="text/javascript" src="/js/jquery/jquery-1.5.1.min.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="/js/jquery/ui/jquery.ui.core.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="/js/jquery/ui/jquery.ui.widget.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="/js/jquery/ui/jquery.ui.mouse.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="/js/jquery/ui/jquery.ui.draggable.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="/js/js_draw_2d/jsDraw2D.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="/js/bobbel.js"&gt;&lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
<p style="margin-bottom: 0cm">Es hat also einen Button um einen neuen Knoten anzulegen und einen Button um eine neue Linie anzulegen.</p>
<p style="margin-bottom: 0cm">Damit die Linien hinter den Kreisen angezeigt werden, müssen sie im DOM oberhalb der Kreise platziert werden (Siehe div#canvas Inhalt)</p>
<p style="margin-bottom: 0cm">Das war für mich eine wichtige Erkenntnis, dass man über die Positionierung im DOM die Reihenfolge der Darstellung, also sichtbar, unsichtbar, festlegen kann. Vermutlich wäre es noch sicherer wenn man die entsprechende Z-Order im CSS korrekt einstellt. Aber was solls, so geht’s erst mal auch.</p>
<p style="margin-bottom: 0cm">Der Rest in dem Dokument ist einfach geradeaus runtergetippt.</p>
<p style="margin-bottom: 0cm">Bei den input-Feldern habe ich die OnClick-Events schon mit den dazugehörigen Funktionen verknüpft. Das hätte ich natürlich auch im JavaScript machen können. Dann wäre weniger Vermischung von HTML und JavaScript vorhanden.</p>
<p style="margin-bottom: 0cm">Die JavaScript-Elemente lade ich am Ende des Dokuments.</p>
<p style="margin-bottom: 0cm">Damit erreiche ich, dass der Browser zuerst den HTML-DOM-Baum lädt und interpretiert. Das Übersetzen von JavaScript findet erst nach der Anzeige statt und so ist die ganze Seite für den Anwender etwas schneller nutzbar. Diese Vorgehensweise wurde mir im Buch jQuery Kochbuch von O´ Reilly (ISBN 978.3.89721.999-1) erklärt. Danke für die Idee!</p>
<p style="margin-bottom: 0cm">Tja und mehr gibt es zum HTML-Dokument nicht zu sagen.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/moc/der-bobbelgenerator-anforderungen-und-html-dokument/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download für JavaScript wiederkehrender Event mit .htaccess Anpassung</title>
		<link>http://www.baldenhofer.eu/blog/it/download-fuer-javascript-wiederkehrender-event-mit-htaccess-anpassung</link>
		<comments>http://www.baldenhofer.eu/blog/it/download-fuer-javascript-wiederkehrender-event-mit-htaccess-anpassung#comments</comments>
		<pubDate>Sat, 16 Jan 2010 22:08:37 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[eventhandler]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1857</guid>
		<description><![CDATA[Beim Artikel Mit JavaScript einen wiederkehrenden Event erzeugen hat Andy gefragt, ob ich den Beispielcode so aufbereiten kann, dass man ihn herunterladen kann. Unter Javascript_Download habe ich nun zwei Dateien angelegt, die den Quellcode darstellen. Ihr könnt die Datei mainpage.html einfach anklicken und sehen, wie der Timer alle 10 Sekunden einen Alarm ausgibt. Natürlich könnt [...]]]></description>
			<content:encoded><![CDATA[<p>Beim Artikel <a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-einen-wiederkehrenden-event-erzeugen">Mit JavaScript einen wiederkehrenden Event erzeugen</a> hat Andy gefragt, ob ich den Beispielcode so aufbereiten kann, dass man ihn herunterladen kann.<br />
Unter <a href="http://www.baldenhofer.eu/javascript_download/">Javascript_Download</a> habe ich nun zwei Dateien angelegt, die den Quellcode darstellen.<br />
Ihr könnt die Datei mainpage.html einfach anklicken und sehen, wie der Timer alle 10 Sekunden einen Alarm ausgibt.<br />
Natürlich könnt ihr die Dateien auch runterladen und euch damit vergnügen <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>.htaccess Anpassung</h3>
<p>Damit die javascript_download Seite browsbar ist, habe ich eine .htaccess eingerichtet in der ich den Befehl <strong>Options +Indexes</strong> eingetragen habe.<br />
Jetzt ist dieses Verzeichnis, und genau nur dieses Verzeichnis, einsehbar.<br />
Diese Option finde ich schick, denn damit kann man sich schnell mal ein Verzeichnis zum Browsen und Liebhaben freischalten.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/download-fuer-javascript-wiederkehrender-event-mit-htaccess-anpassung/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kleine Aufgabe um mit JavaScript Events rumzuspielen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen#comments</comments>
		<pubDate>Thu, 28 May 2009 08:13:23 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1212</guid>
		<description><![CDATA[Hier eine kleine Aufgabe: Du hast eine HTML Seite auf der eine Eingabemöglichkeit (z.B. eine Textarea oder ein Input Field) vorhanden ist. Fokus setzen Wenn du die HTML Seite lädst, wird der Cursor zuerst in dieses Eingabefeld positioniert. Ausgabe der eingegebenen Zeichen Wenn du in dem Eingabefeld etwas eingibst, dann wird jedes eingegebene Zeichen in [...]]]></description>
			<content:encoded><![CDATA[<p>Hier eine kleine Aufgabe:<br />
Du hast eine HTML Seite auf der eine Eingabemöglichkeit (z.B. eine Textarea oder ein Input Field) vorhanden ist.</p>
<h3>Fokus setzen</h3>
<p>Wenn du die HTML Seite lädst, wird der Cursor zuerst in dieses Eingabefeld positioniert.</p>
<h3>Ausgabe der eingegebenen Zeichen</h3>
<p>Wenn du in dem Eingabefeld etwas eingibst, dann wird jedes eingegebene Zeichen in einem Ausgabebereich (paragraph oder so&#8230;) erscheinen. Im Startzustand werden die Zeichen einfach wieder so ausgegeben wie sie vom Anwender eingegeben worden sind.</p>
<h3>Sonderfall Text falschrum ausgeben</h3>
<p>Wenn die Checkbox &#8220;Falschrum&#8221; angeklickt wird, dann werden alle eingegebenen Zeichen verkehrt herum in dem Ausgabefeld ausgegeben.</p>
<h3>Lösungsschritte</h3>
<ul>
<li>Schreibe zuerst auf, welche Mittel du zur Umsetzung einsetzten willst.</li>
<li>Beschreibe jede Datei die du erstellen willst.</li>
<li>Beschreibe welche Events du abfangen willst und warum du diese abfangen willst.</li>
<li>Schreibe die einzelnen Funktionen in Pseudocode. Also was muss bei der Initialisierung geschehen? Was wenn eine Taste gedrückt wurde?</li>
<li>Programmiere zuerst alles ausser den Sonderfall.</li>
<li>Wenn das klappt programmiere den Sonderfall.</li>
<li>Stelle die Ergebnisse auf das Blog damit andere es auch sehen können. (Natürlich nur, wenn du auf das Blog Zugriff hast wie Jozo zum Beispiel <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</li>
</ul>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Aufgabe Ratespiel um Mengenlehre zu verwenden</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-ratespiel-um-mengenlehre-zu-verwenden</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-ratespiel-um-mengenlehre-zu-verwenden#comments</comments>
		<pubDate>Thu, 07 May 2009 04:18:24 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Unterricht]]></category>
		<category><![CDATA[Fachinformatiker]]></category>
		<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mengenlehre]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=993</guid>
		<description><![CDATA[Zu den Grundlagen bei der Ausbildung zum Fachinformatiker gehört es dazu sich ein wenig mit der Mengenlehre auszukennen. Die große Frage ist da natürlich &#8220;Wieso soll ich Mengenlehre können, wenn ich doch nur programmieren will?&#8221; Und die Antwort darauf ist relativ einfach: Manchmal braucht man diese Grundfertigkeit um ein Programmierproblem zu lösen. Ratespiel Lass uns [...]]]></description>
			<content:encoded><![CDATA[<p>Zu den Grundlagen bei der Ausbildung zum Fachinformatiker gehört es dazu sich ein wenig mit der Mengenlehre auszukennen.<br />
Die große Frage ist da natürlich &#8220;Wieso soll ich Mengenlehre können, wenn ich doch nur programmieren will?&#8221;<br />
Und die Antwort darauf ist relativ einfach:<br />
Manchmal braucht man diese Grundfertigkeit um ein Programmierproblem zu lösen.</p>
<h3>Ratespiel</h3>
<p>Lass uns mal ein kleines Ratespiel basteln.<br />
In diesem Ratespiel geht es darum, dass der Computer sich ein paar Zufallszahlen zusammenkratzt und der Spieler diese erraten soll.<br />
Wenn der Spieler alle Zufallszahlen erraten hat, hat er gewonnen.</p>
<h4>Dokumentation</h4>
<p>Lese diese Aufgabe hier komplett durch und schreibe eine Dokumentation die alle benötigten Funktionen beinhaltet. Beschreibe zuerst die mathematischen Zusammenhänge der drei Mengen. Mach dir klar welche Komponenten du nacheinander erstellen musst.<br />
Beispielsweise kann die Highscore Verwaltung unabhängig vom Spiel erstellt werden. Du kannst also zuerst das Spiel erstellen und dann den Highscore. Oder anders herum.</p>
<h4>Initialisierung</h4>
<p>Erstelle mit JavaScript die notwendige Oberfläche.<br />
Diesmal muss der Anwender ein Eingabefeld bekommen, in dem er die jeweilige zu ratendene Zahl eingeben kann. Wenn er dies getan hat, drückt er den &#8220;Rate&#8221; Button und der Rechner kontrolliert, ob diese Zahl mit einer der zu erratenden übereinstimmt.<br />
Die Obermenge (also alle möglichen zu ratenden Zahlen) werden in einer Liste dargestellt.<br />
Die bisher verwendeten Zahlen sind eine Teilmenge und werden in einer zweiten Liste dargestellt.<br />
Falls der Anwender richtige Zahlen erraten hat, werden diese in einer dritten Liste dargestellt. Die Schnittmenge der erratenen Zahlen und der falsch geratenen Zahlen ergibt die Menge der Zahlen die der Anwender bisher eingegeben hat.<br />
Für Meldungen baust du wieder ein id=&#8221;message&#8221; Feld ein.<br />
Als Letztes soll noch eine Ausgabe erfolgen, die angibt wie häufig bisher eine Zahl geraten wurde.</p>
<h4>Verwaltung der Obermenge und der bisher verwendeten Zahlen</h4>
<p>Wenn der Anwender eine Zahl verwendet hat, wird diese in der Obermengenliste entfernt. Du musst also eine Funktion schreiben, die kontrolliert ob die geratene Zahl eine Teilmenge der Obermenge ist. Oder anders gesagt, du musst die Schnittmenge der bisher geratenen und der Obermenge durchführen.<br />
Falls dem so ist, wird sie aus der Obermengenliste entfernt und kontrolliert ob sie Teil der zu erratenden Untermenge ist.<br />
Falls die verwendete Zahl nicht in der Obermenge vorkommt, muss eine entsprechende Meldung ausgegeben werden. Also &#8220;Diese Zahl ist nicht innerhalb der möglichen zu erratenden Zahlen enthalten. Entweder hast du die Zahl schon verwendet oder sie liegt außerhalb des erlaubten Bereichs&#8221;.<br />
Die geratene Zahl wird entweder in der Liste der falsch geratenen Zahlen oder in der Liste der korrekt erratenen Zahlen geführt.</p>
<h4>Zählen</h4>
<p>Jedesmal wenn eine Zahl erraten wurde, wird der Spielzugzähler um eins erhöht und dargestellt.<br />
Logischerweise hat der Spieler gewonnen, der am wenigsten Spielzüge benötigt hat.</p>
<h4>Highscore Verwaltung</h4>
<p>Wenn der Spieler alle Zahlen erraten hat, wird die aktuelle Highscore Tabelle vom Server geladen und entsprechend angepasst. Das bedeutet, dass du auf dem Server die aktuelle Highscore Liste speichern musst. Diese muss vom Client geladen und manipuliert werden können. Hier darfst du frei entscheiden ob der Client diese Liste direkt verändert, oder einfach nur das Ergebnis zum Server schickt. Wichtig ist nur, dass der Client am Ende die Top 10 der besten Spieler anzeigt.</p>
<h3>Fazit</h3>
<p>Da wir uns mit Mengenlehre ein wenig auskennen, konnten wir die Verhältnisse der einzelnen Mengen (Obermenge und die Teilmengen Ergebnisse und falsch gewählte Zahlen) hiermit beschreiben. Wir können uns die einzelnen Mengen gut vorstellen. Dieses Beispiel zeigt, dass es sich auszahlt ein wenig Mengenlehre verstanden zu haben.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-ratespiel-um-mengenlehre-zu-verwenden/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Lösungsvorschlag um Eingabefelder während der Eingabe mit JavaScript zu überprüfen</title>
		<link>http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen</link>
		<comments>http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen#comments</comments>
		<pubDate>Wed, 29 Apr 2009 14:59:30 +0000</pubDate>
		<dc:creator>Jozo</dc:creator>
				<category><![CDATA[Guggat emol]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=961</guid>
		<description><![CDATA[Hier ein Lösungsvorschlag für die Aufgabe aus dem Artikel Eingabefelder während der Eingabe prüfen. Um diese Anwendung zu realisieren reicht HTML und JavaScript aus. Ausserdem arbeiten wir auf Client -Seite, und deswegen passt JavaScript doch eigentlich auch ganz gut. Für die Realisierung habe ich mal eine &#8220;eingabe.html&#8221; Seite erstellt welche wie erwünscht ein einfaches Eingabefeld [...]]]></description>
			<content:encoded><![CDATA[<p>Hier ein Lösungsvorschlag für die Aufgabe aus dem Artikel <a href="http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen">Eingabefelder während der Eingabe prüfen</a>.</p>
<p>Um diese Anwendung zu realisieren reicht HTML und JavaScript aus. Ausserdem arbeiten wir auf Client -Seite, und deswegen passt JavaScript doch eigentlich auch ganz gut.</p>
<p>Für die Realisierung habe ich mal eine &#8220;eingabe.html&#8221; Seite erstellt welche wie erwünscht ein einfaches Eingabefeld beinhaltet und wie folgt aussieht.</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt; !DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;de&quot; lang=&quot;de&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;title&gt;Eingabeoberfläche&lt;/title&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;initialize.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;body onload=&quot;initialize();&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;p id=&quot;message&quot;&gt;Bitte gebe Zahlen zwischen -10 und 100 ein.&lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;form&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;input&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/form&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>Die JavaScript Datei mit dem Namen &#8220;initialize.js&#8221;, befüllt unsere HTML-Seite mit dem passenden Event &#8220;onkeyup&#8221;. Weiterhin befindet sich die Funktion inputCheck(), welche die Eingabe überprüft, ebenfalls in dieser Datei. Die Trennung der Initialiserung und der Funktion hab auch ich mir bei diesem kleinen Beispiel gespart. Hier nun die initialize.js</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Schreibt den Event onkeyup in das Input-Feld.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> initialize<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> inputField = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputField.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;onkeyup&quot;</span>,<span class="st0">&quot;inputCheck();&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Die Funktion welche die Prüfung der Zahlen durchführt und passende Meldungen</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* in den Paragraphen mit der id=&quot;message&quot; schreibt.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> inputCheck<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> eingabe = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span>.<span class="me1">value</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> messageField = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;message&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// ist das eingabefeld leer wird wie die Ursrpüngliche Meldung angegeben.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe == <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Bitte gebe Zahlen zwischen -10 und 100 ein.&quot;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Ist die Eingabe kleiner oder gleich -11 &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe <span class="sy0">&lt;</span> = <span class="nu0">-11</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Die Zahl &quot;</span> +eingabe+ <span class="st0">&quot; ist zu klein&quot;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Ist die Eingabe kleiner oder gleich 100 und grösser oder gleich -10 </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// ist das im gültigen Bereich.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe <span class="sy0">&lt;</span>= <span class="nu0">100</span> <span class="sy0">&amp;&amp;</span> eingabe <span class="sy0">&gt;</span>= <span class="nu0">-10</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Die Zahl &quot;</span> +eingabe+ <span class="st0">&quot; ist ok&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Ist die Eingabe grösser oder gleich 101, ist die Zahl zu gross</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe <span class="sy0">&gt;</span>= <span class="nu0">101</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Die Zahl &quot;</span> +eingabe+ <span class="st0">&quot; ist zu gross&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Falls die Eingabe keine Zahl ist (is Not a Number) wird ein unerlaubter </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Wert gemeldet.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>isNaN<span class="br0">&#40;</span>eingabe<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = eingabe+<span class="st0">&quot; ist ein unerlaubter Wert&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Aufgabe Eingabefelder während der Eingabe überprüfen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen#comments</comments>
		<pubDate>Mon, 27 Apr 2009 21:36:34 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Unterricht]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=951</guid>
		<description><![CDATA[Hier eine kleine Aufgabe mit der auf Anwendereingaben reagiert werden soll. Erstelle eine kleine HTML Seite auf der ein Eingabefeld (input type=&#8221;text&#8221;) vorhanden ist. Weiterhin soll auf der Seite eine ein Paragraph mit der id=&#8221;message&#8221; vorhanden sein. Auf der Seite wäre es schön, wenn noch eine Eingabeaufforderung vorhanden wäre. So nach dem Motto &#8220;Bitte gebe Zahlen zwischen [...]]]></description>
			<content:encoded><![CDATA[<p>Hier eine kleine Aufgabe mit der auf Anwendereingaben reagiert werden soll.</p>
<p>Erstelle eine kleine HTML Seite auf der ein Eingabefeld (input type=&#8221;text&#8221;) vorhanden ist.<br />
Weiterhin soll auf der Seite eine ein Paragraph mit der id=&#8221;message&#8221; vorhanden sein.<br />
Auf der Seite wäre es schön, wenn noch eine Eingabeaufforderung vorhanden wäre. So nach dem Motto &#8220;Bitte gebe Zahlen zwischen -10 und 100 ein.</p>
<p>Wenn der Anwender nun eine Zahl eingibt, soll währen der Eingabe kontrolliert werden ob es sich um eine korrekte Zahl handelt.<br />
Korrekte Zahlen sind dabei  Zahlen zwischen -10 und 100.</p>
<p>Folgende Ergebnisse werden erwartet:</p>
<ul>
<li>Eingabe von -13<br />
Fehlermeldung im message-Paragraph  &#8221;Zahl zu klein&#8221;</li>
<li>Eingabe von 0<br />
Ausgabe im message-Paragraph:  &#8220;Alles ok&#8221;</li>
<li>Eingabe von 102<br />
Fehlermeldung im message-Paragraph  &#8221;Zahl zu gross&#8221;</li>
<li>Eingabe von &#8220;alfred&#8221;<br />
Fehlermeldung im message-Paragraph  &#8221;Unerlaubter Wert&#8221;</li>
</ul>
<p>Soweit klar?<br />
Die Eingabeüberprüfung soll während der Anwender die Zahlen eintippt durchgeführt werden.</p>
<h3>Aufgabe 1:</h3>
<p>Welche Programmiersprache, und warum, wirst du für die Realisierung dieser Aufgabe einsetzen?</p>
<h3>Aufgabe 2:</h3>
<p>Schreibe mit Pseudocode was du genau machen willst.<br />
Welche HTML, PHP, JavaScript Dateien benötigst du für eine saubere Umsetzung?</p>
<h3>Aufgabe 1:</h3>
<p>Realisiere die Eingabefunktion.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Objekte in JavaScript mit JSON deklarieren</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/objekte-in-javascript-mit-json-deklarieren</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/objekte-in-javascript-mit-json-deklarieren#comments</comments>
		<pubDate>Sun, 26 Apr 2009 19:44:57 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Objekte]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=841</guid>
		<description><![CDATA[Im Artikel JavaScript Klassen mit Object-Literal Syntax erstellen habe ich über die verkürzte Darstellungsform beim Erstellen von Klassen in JavaScript geschrieben. Nachdem ich drüber geschlafen habe, ist mir wieder das Wort JSON (Javascript Object Notation) eingefallen. Blöd wenn man ein bisschen verkalkt ist Unter JSON können sich viele Menschen schon viel mehr vorstellen gelle? Ist [...]]]></description>
			<content:encoded><![CDATA[<p>Im Artikel <a href="http://www.baldenhofer.eu/blog/it/programmieren/javascript-klassen-mit-object-literal-syntax-erstellen">JavaScript Klassen mit Object-Literal Syntax erstellen</a> habe ich über die verkürzte Darstellungsform beim Erstellen von Klassen in JavaScript geschrieben.<br />
Nachdem ich drüber geschlafen habe, ist mir wieder das Wort <a href="http://www.json.org/">JSON (Javascript Object Notation)</a> eingefallen. Blöd wenn man ein bisschen verkalkt ist <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Unter JSON können sich viele Menschen schon viel mehr vorstellen gelle?</p>
<h3>Ist JavaScript denn nun wie Java?</h3>
<p>JavaScript wird zwar wegen dem Marketingnamen von Netscape häufig mit Java in Verbindung gebracht. Wenn man sich aber einfach klar macht, dass JavaScript einfach nur ein Name ist, dann wird einem auch ziemlich schnell klar dass man Java nicht mit JavaScript gleichsetzen darf.<br />
Immerhin hat JavaScript früher mal LiveScript geheisen und dass hat nun wirklich nichts mit Java zu tun.<br />
Die Notationen sind zum Teil identisch. Und das macht es alten C++ und Java Tippern, wie mir zum Beispiel, nicht einfacher in den Mustern der anderen Sprachen zu denken.<br />
Aber JavaScript ist nun mal anders.</p>
<h3>Arrays sind Objekte</h3>
<p>In JavaScript wird sehr viel über Arrays beschrieben.<br />
Ein Array kannst du wie ein <a href="http://www.baldenhofer.eu/blog/it/programmieren/arrays-in-php">Assoziatives Array</a> in PHP oder anderen Sprachen verwenden.<br />
Du kannst aber auch Funktionen in die Arrays einschreiben. Genau das habe ich ja im letzten JavaScript Beispiel getan ohne es zu begreifen <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .<br />
Wenn du die JSON Schreibweise mal gewohnt bist, kannst du komplexe Datenstrukturen übersichtlich darstellen. Und genau darum geht es bei JSON und dem Objekteinsatz in JavaScript.</p>
<h3>Typensicherheit in JavaScript</h3>
<p>Eben genau das gibt es in JavaScript nicht. Wenn du bei Sprachen, wie Java, deine Klassen deklarierst, hast du Typsicherheit. Du kannst einer Variablen, die einen Integer darstellt, keinen Boolean zuweisen. In JavaScript werden Variablen einfach benannt und du kannst ihnen zuweisen was du willst. Es ist also erlaubt folgende Sequenz einzugeben:</p>
<div class="geshi no javascript">
<div class="head">var eineVariable = 12;</div>
<ol>
<li class="li1">
<div class="de1">eineVariable = <span class="st0">&quot;Hallole du dolle Welt!&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">eineVariable = <span class="kw2">new</span> Object<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Wenn du Java Entwickler bist, bekommst du beim Anblick der Sequenz normalerweise Zahnweh. Ist aber egal. JavaScript ist eine andere Art von Programmiersprache und wenn man das einsetzen will, dann muss man damit umgehen wie es ist. Ansonsten kämpfst du immer gegen die Sprache an. Das bringt dich aber nicht weiter.<br />
Programmiersprachen sind dazu da, Business-Probleme zu lösen. Wenn du mehr Zeit damit verbringst zu phillosophieren warum etwas nicht so toll ist wie es sein könnte, verlierst du wertvolle Zeit. Nimm die Zeit lieber zum Ausschlafen, Wandern oder Blog-Artikel schreiben.</p>
<h3>Nochmal zur JSON Schreibweise</h3>
<p>In JSON wird die Schlüssel-Wertezuweisung grundsätzlich durch einen Doppelpunkt beschrieben.</p>
<div class="geshi no javascript">
<div class="head">var eineVariable = new Array(){</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; alter &nbsp; &nbsp;: <span class="nu0">42</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; setAlter : <span class="kw2">function</span><span class="br0">&#40;</span>alter<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">alter</span> = alter;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Zwischen dem Schlüssel (z.B. alter) und dem Wert dürfen mehrere Leerzeichen stehen. Du darfst also einrücken und somit die Lesbarkeit erhöhen.<br />
Ich habe den Code für <a href="/programmieren/prototypLiteral_corrected.js">das letzte Beispiel</a> etwas überarbeitet und nun vollständig auf JSON Schreibweise umgebaut.<br />
Dabei habe ich mal wieder die Fehlerkonsole eingeschaltet und meine nicht deklarierten Variablen mit dem Schlüsselwort &#8220;var&#8221; definiert. Es ist doch immer wieder schön, wenn die Fehlerkonsole keine Fehler anzeigt <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Beim Erstellen dieses Beispiels war ich vermutlich nicht ganz wach gewesen. Normalerweise schalte ich immer die Fehlerkonsole ein und bau Code der keine Informationen, Warnungen oder gar Fehler produziert.<br />
Wenn du JavaScript in deine Webseiten einbaust, solltest du beim Testen immer die Fehlerkonsole geöffnet haben. Sie verrät dir viele spannende Details auf die du ansonsten nur schwer kommen kannst&#8230;</p>
<h3>Verschachtelung</h3>
<p>Wenn deine Datenstruktur nicht flach, sondern eher ein bisschen verschachtelt ist, kann das mit JSON auch sehr schön beschrieben werden.<br />
Schau dir dazu doch einfach mal <a href="http://www.json.org/example.html">JSON Beispiel zum Verschachteln</a> an.<br />
Die Verschachtelung erfolgt durch [] Klammern.<br />
Also ungefähr so:</p>
<div class="geshi no javascript">
<div class="head">{</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; a:<span class="nu0">6</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; a_a=<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; c:<span class="nu0">42</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; d:<span class="kw2">null</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; e:<span class="nu0">3</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; f:<span class="nu0">5</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Den einzelnen Attributen werden ihr Werte durch die Doppelpunkte zugewiesen und die Verschachtelung erfolgt durch die [] Klammern.<br />
Ich habe mich am Anfang ein wenig gegen diese Darstellung gesträubt. So im Lauf der Zeit habe ich jedoch die Schönheit und die klare Darstellung zu schätzen gelernt.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/objekte-in-javascript-mit-json-deklarieren/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Programmieren]]></series:name>
	</item>
		<item>
		<title>Modelle von der Oberfläche trennen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/modelle-von-der-oberflaeche-trennen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/modelle-von-der-oberflaeche-trennen#comments</comments>
		<pubDate>Fri, 24 Apr 2009 17:22:47 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Modelle]]></category>
		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=812</guid>
		<description><![CDATA[Bei komplexeren Webapplikationen ist es eine gute Idee die Views, also die Ansichten, von den Modellen getrennt zu halten. Die Idee ist aus folgenden Gründen gut: Der Webdesigner soll nicht mit unleserilchem Code belastet werden. Getrennt entwickelter Code ist übersichtlich und einfach zu warten. Wenn ein Webdesigner in seinem HTML Code JavaScript Code-Segmente einpflegen muss, [...]]]></description>
			<content:encoded><![CDATA[<p>Bei komplexeren Webapplikationen ist es eine gute Idee die Views, also die Ansichten, von den Modellen getrennt zu halten.</p>
<p>Die Idee ist aus folgenden Gründen gut:</p>
<ul>
<li>Der Webdesigner soll nicht mit unleserilchem Code belastet werden.</li>
<li>Getrennt entwickelter Code ist übersichtlich und einfach zu warten.</li>
<li>Wenn ein Webdesigner in seinem HTML Code JavaScript Code-Segmente einpflegen muss, ist die Gefahr gross dass er dies falsch macht.</li>
<li>Ein Modell soll Daten speichern und verwalten und nicht mit einer View direkt verbunden sein. Falls eine zweite View hinzukommt, musst du ansonsten das Modell verändern.</li>
<li>Wenn die View direkt mit einem Modell verkuppelt wird, werden spätere Änderungen sehr aufwändig.</li>
</ul>
<p>Es gibt noch hundert andere Gründe. Aber belassen wir es mal dabei.</p>
<p>&lt;h3&gt;Das Model View Controller Pattern&lt;/h3&gt;</p>
<p>Ich werde in der Serie &lt;a href=&#8221;http://www.baldenhofer.eu/blog/series/design-pattern&#8221;&gt;Design Pattern&lt;/a&gt; die Eigenschaften des Model View Controller Pattern genauer beleuchten. Hier möchte ich einfach mal zeigen wie die Trennung von Daten (Modell), der Ablaufsteuerung (Controller) und der View (der HTML-Ansicht) funktionieren kann.</p>
<h3>Die View</h3>
<p>Ich habe eine kleine HTML-Seite gebaut, die unsere View darstellen soll. Diese HTML Seite beinhaltet nur HTML-Tags und im Header Bereich die Einbindung der JavaScript Datei in der ich den Controller und das Modell deklariert habe. Du kannst sie unter dem Link <a href="/programmieren/prototypLiteral.html">PrototypLiteral</a> aufrufen.<br />
In der Seite passiert nicht viel Spannendes. Du kannst einen Namen und Vornamen eingeben und das Person-Objekt verändert die Attribute ein wenig.</p>
<p>Wenn du aus den Eingabefeldern herausspringst, werden die jeweiligen Meldungsparagraphen entsprechend verändert.</p>
<h3>Der Controller und das Modell</h3>
<p>In der Datei <a href="/programmieren/prototypLiteral.js">PrototpyLiteral JavaScript</a> habe ich einen Controller und ein Modell eingeschrieben.<br />
Wenn du die Datei aufmachst findest du folgenden Code:</p>
<div class="geshi no javascript">
<div class="head">/**</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="sy0">*</span> Erstellt im HTML-Dokument die nötigen Eventhandler und initialisiert den Controller dieser Webappliaktion.</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="me1">*</span><span class="sy0">/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> <span class="kw3">onload</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; controller = <span class="kw2">new</span> PrototypController<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">document</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Der Controller, der die Aktivitäten innerhalb unserer Webapplikation steuert.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Im Konstruktor werden die Eingabefelder des HTML Dokuments mit den notwendigen onblur-Events ausgestattet.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> PrototypController<span class="br0">&#40;</span>document<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">document</span> = document;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">person</span> = <span class="kw2">new</span> Person<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> inputName = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;name&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputName.<span class="kw3">onblur</span> = <span class="kw1">this</span>.<span class="me1">onBlurHandlerName</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputName.<span class="me1">value</span> = <span class="kw1">this</span>.<span class="me1">person</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Beim Event wird das betroffene HTML-Element übergeben. Dieses HTML Element muss eine Referenz auf</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// unseren Controller erhalten. Ansonsten können wir keine Verknüpfung zwischen der Oberfläche und dem Modell erreichen.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputName.<span class="me1">controller</span> = <span class="kw1">this</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> inputFirstName = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;firstname&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputFirstName.<span class="kw3">onblur</span> = <span class="kw1">this</span>.<span class="me1">onBlurHandlerFirstName</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputFirstName.<span class="me1">value</span> = <span class="kw1">this</span>.<span class="me1">person</span>.<span class="me1">getFirstname</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputFirstName.<span class="me1">controller</span> = <span class="kw1">this</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Implementation der benötigten EventHandler.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">PrototypController.<span class="me1">prototype</span>=<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; onBlurHandlerName:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Von der Referenz auf den Controller das Dokument und das Personenobjekt laden.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> document = <span class="kw1">this</span>.<span class="me1">controller</span>.<span class="me1">document</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> person = <span class="kw1">this</span>.<span class="me1">controller</span>.<span class="me1">person</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> value = <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">value</span><span class="br0">&#41;</span> ? <span class="kw1">this</span>.<span class="me1">value</span> : <span class="st0">&quot;Kein Name&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; person.<span class="me1">setName</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; message = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;message_name&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; message.<span class="me1">innerHTML</span> = person.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; onBlurHandlerFirstName:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> value = <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">value</span><span class="br0">&#41;</span> ? <span class="kw1">this</span>.<span class="me1">value</span> : <span class="st0">&quot;Kein Name&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> document = <span class="kw1">this</span>.<span class="me1">controller</span>.<span class="me1">document</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> person = <span class="kw1">this</span>.<span class="me1">controller</span>.<span class="me1">person</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; person.<span class="me1">setFirstname</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; message = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;message_firstname&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; message.<span class="me1">innerHTML</span> = person.<span class="me1">getFirstname</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Das Modell, welches eine Person verwaltet.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Person<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">name</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">firstName</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Person.<span class="me1">prototype</span>=<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; setName:<span class="kw2">function</span><span class="br0">&#40;</span><span class="kw3">name</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">name</span> = <span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; getName:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="kw3">name</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span>+<span class="st0">&quot;_vomModel&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>, &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; setFirstname:<span class="kw2">function</span><span class="br0">&#40;</span>firstName<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">firstName</span> = firstName;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; getFirstname:<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">firstName</span> <span class="sy0">!</span>= <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">firstName</span>+<span class="st0">&quot;_vomModel&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In normalen Webanwendungen sollte das Modell und der Controller in einzelnen Dateien liegen. Darauf habe ich im Moment verzichtet, da dieses Beispiel sehr klein und übersichtlich ist.<br />
Die erste Funktion onload() wird im HTML beim Laden der Seite aufgerufen.<br />
Diese Funktion initialisiert einen Controller, der die Abläufe im System überwachen soll.<br />
Der Controller (hier PrototypController) verknüpft das HTML-Dokument mit sich selbst, indem er die notwendigen Events wie onblur in das HTML-Dokument einträgt.<br />
Weiterhin erstellt er das Modell (Person) in dem die Daten gespeichert werden sollen.<br />
Wenn ein Event auftritt wird eine der onBlurHandlerXXX Methoden aufgerufen. Diese steuern den eigentlichen Programmablauf.<br />
Der Controller ist somit das Bindeglied zwischen der Oberfläche und dem Modell.<br />
Wir können für einzelne Eingabeelemente das Model View Controller Pattern verwenden und so eine saubere, einfach zu wartende und stabile Verwaltung unserer Daten hinbekommen.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/modelle-von-der-oberflaeche-trennen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
	</channel>
</rss>

