JavaScript Sammelthread: JS Frameworks

Jap das ist auch schön und würde mir eigentlich auch reichen, aber dann habe ich immer noch das problem beim laden einer Seite. Wollte eigentlich kein AJAX machen weil des net so mein Ding ist, aber das ist das einzige was mir persönlich grade einfallen würde. Außer vielleicht noch ne dirty Cookie Lösung.
 
Mit DOM-Storage meinst Du dieses hier? Das klingt schonmal eleganter, gibt es aus eurer Sicht dagegen Einwände?

*edit
Habe auch noch dieses hier gefunden, das sieht denke ich einfacher zu handlen aus.
 
Zuletzt bearbeitet:
@Sebmaster

Also irgendwie bin ich zu doof für so js Frameworks. Ich habe versucht mal das DOMCached zu implementieren, aber der meinte DOMCached wäre nicht definiert. Habe ich was falsch gemacht oder liegt der fehler im Plugin?
Mein Code:
PHP:
$(document).ready(function() {
	// handle menu Toggle view
	$('.menu_headline').click(
			function () {
				if($.DOMCached.get('menu') == $(this).next('.container_pages')) {
					$.DOMCached.deleteKey('menu');
					$('#current_menuchilds').slideUp();
					return false;
				}
				if($('#current_menuchilds') != "") {
					$('#current_menuchilds').fadeOut();
				}
				// remove first all other classes
				$.DOMCached.set('menu', $(this).next('.container_pages'));
				$('#current_menuchilds').wrapInner($.DOMCached.get('menu')).fadeIn("slow");
				//$(this).next('.container_pages').slideToggle("slow");
				return false;
			}
	);

});
Meine Meta:
HTML:
<script type="text/javascript" src="/js/lib/jquery.js"></script>
<script type="text/javascript" src="/js/lib/jquery.json.js"></script>
<script type="text/javascript" src="/js/lib/jquery.domCached.js"></script>
<script type="text/javascript" src="/js/project.js"></script>
Die init() Von DOMCached bringt nen init() also wird aufgerufen und Firebug bringt nen 200OK beim laden.

Genau das gleiche Problem habe ich bei dem attic Plugin, also irgendwas stimmt bei mir net.
 
Verwendest du noch irgend ein anderes JS-Framework, das die Variable $ während dem Pageload überschreiben könnte?

Bzw. schickst du mir mal die URL per PN?
 
Guten moin,

ehm Url is schlecht da es ne basis app auf meinem xampp ist, andere JS oder sonstiges nicht das ich wüsste. Hier mal ein Netzwerkauszug von FireBug:

Warum der das auch nochmal von Google holt darfst mich aber net fragen, evtl vom yaml FS.

*edit
Ah der Groschen ist schonmal gefallen, warum einmal auf googleapis zugegriffenwird. Das kommt von "ZFDebug v1.5", habe ich aber eben geändert und nun ist jquery nur einmal geladen.
 
Zuletzt bearbeitet:
Wenn das eine jQuery-Objekt (in dem das Plugin gespeichert ist) durch das andere überschrieben wird, dann kanns das nicht geben. Bin mir aber nicht sicher :think:

Edit: Plugin noch immer nicht vorhanden?
 
Edit: Plugin noch immer nicht vorhanden?

Hmm also nun habe ich es endlich geschafft, das Plugin scheint zu gehen ich bekomme nun folgenden Fehler:
b.jStore.compactJSON is not a function
https://basic/js/lib/jquery.jstore-all-min.js
Line 30

Ich musste leider meine geliebte ZendDebg rausnehmen, die hat die Fehler verursacht. Nutzt Du die nicht in deinen ZF Apps? Muss mich da nochmal schlau machen was der nu noch will, weil die load() rufe ich auf und das sollte ja laut wiki von jStore reichen. Dabei ist es egal ob ich $. oder jQuery. schreibe, der Fehler kommt immer.

Hier ist auch mal die Seite für euch, scheint nen tick besser zu sein als DOMCache.

*edit
DomCached funktioniert bei jStore bekomme ich immer ne Exception das die Engine not ready sei. Fals das auch einer von euch vorhat zu nutzten, wäre schon wenn er das mal bei sich testen könnte, fals es noch net im Einsatz ist.
 
Zuletzt bearbeitet:
Das compactJSON ist dann direkt eine Funktion jQuery, also jQuery.compactJSON;)

Jop das habe ich auch gemerkt, bin nun doch letztendlich auf DOMCached umgestiegen das funzt zumindest halbwegs. Nur glaube ich langsam ich bin noch zu doof jQuery zu nutzen, ich such mich grad dumm und dämlich nach einer funktion das HTML innerhalb eines Elements zu bekommen ohne dieses zu löschen wie es html() oder append() anscheinend machen. Im Grunde habe ich sowas wie wrappInner() gesucht allerdings wenn ich das zweimal aufrufe bekomm ich immer nen clone Fehler. Vielleicht habe ich auch nen ganz großen Denkfehler in meiner Rangehensweise.

Btw. Sind wir hier die einzigen, is ganz schön ruhig hier :yawn:

*edit
Das war der Fehler fals es jemanden interessiert, nur wie gesagt ich nutzte nix anderes wie jQuery im Momment.
 
Fast ;), also folgende Aufgaben stellung war gegeben:
Ich habe ein ganz normalen ZF_Navigation Menu mit unterseiten
HTML:
<ul class="navigation">
  <li><a class="menu_headline" href="/admin/config">Config Verwaltung</a> 
    <ul class="container_pages">
      <li><a href="/admin/config/edit">edit</a></li>
      <li><a href="/admin/config/new">new</a></li>

      <li><a href="/admin/config/delete">delete</a></li>
    </ul>
  </li>
  <li><a class="menu_headline" href="/admin/template">Template Verwaltung</a> 
    <ul class="container_pages">
      <li><a href="/admin/template/edit">edit</a></li>
      <li><a href="/admin/template/new">new</a></li>

      <li><a href="/admin/template/delete">delete</a></li>
    </ul>
  </li>
</ul>
und je nach dem auf welche menu_headline geklickt wird soll sich die dazugehörige "container_pages" zeigen.

Erst hatte ich es so das die UL nach unten einfach aufslidet allerdings is mir dann eingefallen das das bei einem sehr langen Menü sch**** sein kann, wenn man immer wieder ruter scollten muss um einen anderen Unterpunkt auszuwählen. Also dachte ich mir gut lasse ich das untermenü in einen div darüber anzeigen
HTML:
            <div class="subcl" id="current_menuchilds">
              <!-- Insert your subtemplate content here -->
            </div>

Das ganze hatte ich mit wrappInner realisiert, allerdings hatte ich dann ganz schnell das problem das ich das nicht vergleichen kann um das Menü beim nochmaligen draufklicken zu schließen, und append usw. brachten mich auch nicht weiter.

Kurz und knapp, so sieht mein Code nun aus mittels html() und er funzt bestens:mrgreen:
PHP:
$(document).ready(function() {
	// fadeIn the menu on a new Site
	if($.DOMCached.get('menu') != null) {
		$('#current_menuchilds').html($.DOMCached.get('menu')).fadeIn('slow');
	}
	// handle menu Toggle view
	$('.menu_headline').click(
		function () {
			// close the menusection
			if($.DOMCached.get('menu') == $(this).next('.container_pages').html()) {
				$.DOMCached.deleteKey('menu');
				$('#current_menuchilds').slideUp('slow').html('');
				return false;
			}

			// open the menusection
			$.DOMCached.set('menu', $(this).next('.container_pages').html());
			$('#current_menuchilds').fadeOut('slow').html($.DOMCached.get('menu')).fadeIn('slow');
			//$(this).next('.container_pages').slideToggle('slow');
			return false;
		}
	);
});

Dieser Post ist mit besonderem Dank, Sebmaster für die tatkräftige und moralische Unterstützung gewittmet, sowie meinen Eltern die mich nicht in eine andere Richtung gefördert haben, sodaß ich heute sowas verzapfe.:ugly:
 
Könntest du nicht jedem Menü ne eigene ID geben? Dann könntest du doch die ID vergleichen, und du ersparst dir sogar, in DOMCached den ganzen HTML-Code zu speichern.

Oder du gibst dem aktiven Menü ne eigene Klasse "activeMenu" und vergleichst dann mit hasClass(), wobei bei dieser Lösung dann DOMCached auf der Strecke bliebe. Workaround hier: Es gibt jQuery('.navigation').index(jQuery('.menu_headline').hasClass('activeMenu')). Damit kannst du dir den aktuellen Index vom aktiven Menü ausgeben lassen.
Dann kannst du mit jQuery('.menu_headline').get(savedIndex) das Menü wieder auslesen und aktivieren.

EDIT: Hat einer von euch schon mit jQuery 1.4pre gearbeitet? Absolut geil sag ich euch. Hab ein kleines Script, das sehr schnell, sehr viele DOM-Selects und Manipulationen durchführt => Speed-up um 50%(!)
 
Zuletzt bearbeitet:
Das mit der "hasClass()" und "addClass()" hatte ich ja wo mir auffile das beim neuladen alles weg is. Und wenn ich das jetzt wieder umbauen würde und mir die aktuelle Klasse nur in DOMCached cachen würde wie sollte ich dann das Object vergleichen beim nochmaligen Klick zum schließen. Das vergleichen zweier jQuery Object war ja mein größtes problem, aber direkten "html()" code kann man simple mit "==" verleichen. Und Speicher hat man ja bei DOM Storage gegeüber anderen ja massig :p

*edit

Btw wieso schreibst du immer jQuery, sollte man das so machen anstatt das $ zu nehmen?
 
Und wenn ich das jetzt wieder umbauen würde und mir die aktuelle Klasse nur in DOMCached cachen würde wie sollte ich dann das Object vergleichen beim nochmaligen Klick zum schließen.

Du sollst ja nicht das jQuery-Object an sich speichern, sondern entweder:

  • Die ID (im Sinne, von HTML-ID-Attribut; als String)
  • Den Index im class="navigation" (als Int)

Und Speicher hat man ja bei DOM Storage gegeüber anderen ja massig :p

Aber String-Operationen sind laaaahm:mrgreen:

Btw wieso schreibst du immer jQuery, sollte man das so machen anstatt das $ zu nehmen?

Verhindert Konflikte mit anderen JS-Libs.
 
jQuery 1.4 rückt ja immer näher, also habe ich mir gedacht, dass ich einen kurzen Ausblick auf die Neuerungen gebe:

  • massive Performance-Verbesserungen für .closest(), was sich speziell auf die Performance von .live() auswirken wird
  • Support für submit, change, mouseenter, mouseleave, focus, und blur bei Live-Events
  • zahlreiche Core-Methoden wurden optimiert, speziell die Methoden der DOM-Manipulation
  • neue Syntax bei der Erstellung von DOM-Elementen:
    PHP:
    jQuery('<div />', {html: 'Etwas Text', id: 'foo', css: {padding: '5px', marginTop: '10px'}, click: someFunction})
    , .attr() bekommt einen zweiten Parameter der das gleiche Verhalten für diese Funktion aktiviert.
  • jQuery.require() als neue Funktion zum Nachladen von Scripts

Die API bleibt dabei voll kompatibel zum 1.3er-Zweig.

Greetz

paddya