Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 1 - Web-Java

JavaScript und Ajax

JavaScript

Wie bereits erwähnt haben wir in unserer Statusbar einen "Planeten-Dropdown". Da man in reinem HTML keine verlinkenden Verweislisten implementieren kann, haben wir uns hier mit JavaScript diese Funktionalität nachgebildet.

Die JavaScript-Funtkion:

function change_planet(what){
	 //holt die gewählte Option des Drop-Downs (option-tag)
	var selectedopt=what.options[what.selectedIndex]
	//holt den Wert des gewählten option-tags
	var URL=selectedopt.value
	//ruft die URL auf
	location.href = URL
}

In der View wird eine Helper-Methode aufgerufen, die den Code für den Dropdown erzeugt. Weil die Statusbar und somit der Dropdown von allen Menüpunkten aus gesehen und angesprochen werden kann, muss man aber den aktuellen Controller und die Action übergeben.

<div id="planet-select">
	planet_select(
		//fragt den aktuellen Controller ab
		request.path_parameters['controller'],
		//fragt die aktuelle action ab
		request.path_parameters['action']
	)
</div>

In dem Helper wird die Funktion planet_select definiert, die den eigentlichen Dropdown dynamisch (man weiss ja nie welche Planeten der User hat) erzeugt. Hierzu wird der Code, der letztlich in der View stehen soll, als String erzeugt und zurück gegeben. Dadurch wird er dann durch den oben beschriebenen Befehl in der View eingefügt.

def planet_select(con, target)
	planets = current_user.planets
	current_planet = planets.find(@planet)
	s = ""
	s += "<option value=\"/web_overview/set_planet_id?planet_id=" +	current_planet.id.to_s + "&con=" + con + "&target=" + target + "\" >"
		+ current_planet.name + "</option>"
 
	planets.each do |p|
      		if(p.id != current_planet.id)
        		s += "<option value=\"/web_overview/set_planet_id?planet_id=" + p.id.to_s + "&con=" + con + "&target=" + target + "\" >"
				+ p.name + "</option>"
      		end
    	end
    	"<select onchange=\"change_planet(this)\">" + s + "</select>"
end

Am Ende erhält man dann einen recht unscheinbaren, aber mächtigen, Dropdown:
Abb. 1: Planeten-dropdown

Ajax

Über die Infobar soll der User immer über die aktuellen Geschenisse seines Accounts auf dem laufenden gehalten werden. Damit dies möglich ist, ohne das der User andauernd manuel aktualisieren muss haben wir per Ajax dafür gesort, dass der Inhalt der Infobar alle 10 Sekunden neu gerendert wird.

<li <%if(@current_page == :main) %> id="active"<%end%> >
	<img src="/images/home_web.png " title="Home" alt="Home"/>
	<%= link_to "Übersicht", :controller => "web_overview"%>
</li>


Page last modified on August 24, 2009, at 02:18 PM