Fórum

Zugriff auf Liferays eigenes jQuery Objekt?

Caroline Gessner, modificado 14 Anos atrás.

Zugriff auf Liferays eigenes jQuery Objekt?

Junior Member Postagens: 32 Data de Entrada: 23/11/09 Postagens Recentes
Hallöchen,

ich habe zwar auch eine Anfrage im englischen Board laufen, aber da es eilt (soll noch dieses Jahr fertig werden die Site : /) und weil es mir so vorkommt, das durchaus Leute nur hier lesen, dachte ich es schadet vielleicht nicht hier auch mal zu posten. emoticon

Allerdings eher in Kurzfassung die Frage:
Wie greife ich aus einer HTML (bzw. eigentlich natürlich eine Velocity-File -> die portal_normal.vm) auf das jQuery Objekt von Liferay zu?

Ich weiß schon, das ich "jQuery" statt "$" benutzen muss.
Wenn ich allerdings nun diesen Code hier:
	#js("$javascript_folder/my_jquery.lavalamp.js")
    <script type="text/javascript">
        jQuery(function() {
            jQuery("#1").lavaLamp({
                fx: "linear", 
                speed: 300,
                click: function(event, menuItem) {
                    return false;
                }
            });
        });
    </script>

im Head meiner FIle einfüge bekomme ich im Firebug und im Entwickler-Tool von Safari die Meldung das:
jQuery is not defined
[Break on this error] <head> <title>Home - Liferay</title> <sc...set=UTF-8" http-equiv="content-type" />\nnew-page (Zeile 3)

(wobei in Zeile 3 natürlich der Code oben steht in /* CDATA...)

Hoffe hier kann mir vielleicht jemand weiter helfen emoticon
Und wenn es nur ein Fingerzeig in Richtung eines Themes ist, das inline JavaScript verwendet das jQuery benutzt ... vielleicht werde ich ja daraus schlau (genug um meinen Fehler zu finden ^^)

Vielen dank im Vorraus allein schon für's bis hier her lesen emoticon
Oliver Bayer, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Liferay Master Postagens: 894 Data de Entrada: 18/02/09 Postagens Recentes
Hi Caroline,

nachdem mein "Tipp" im englischsprachigen Forum nichts gebracht hat, probier ich es eben nochmal auf deutsch emoticon.

Versuche mal das JS wie folgt einzubinden:
<script type="text/javascript" src="$javascript_folder/f2b_jquery.lavalamp.js"></script>

Bei mir hat das bis jetzt immer funktioniert. Wenn's bei dir auch so nicht klappt kannst du ja vielleicht mal mehr vom Quellcode posten.

Grüße Oli
Caroline Gessner, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Junior Member Postagens: 32 Data de Entrada: 23/11/09 Postagens Recentes
Hi Oli emoticon

danke Dir vielmals, das Du Dir soviel Mühe mit mir gibst!

im Moment (nach noch etwas lesen in der Wiki) binde ich das lavalamp-script momentan so ein:
#js("$javascript_folder/jquery_plugin_file.js")

Wenn ich sie wieder so einbinde wie Du geschrieben hast, bekomme ich den Fehler das IN der File (also dem Script selbst) jQuery nicht kennt - das war bei der einbinde Variante davor weg.
jQuery is not defined
[Break on this error] })(jQuery);\r\nmy_jque...valamp.js (Zeile 96)


Den eigentlichen Aufrufscode habe ich nun mal drastisch reduziert und binde ihn in der javascript.js File im Theme ein.
jQuery(
	function() {
        jQuery("#1").lavaLamp(
        	{
			}
		);
	}
);


Allerdings meldet der Firebug nun:
jQuery("#1").lavaLamp is not a function
[Break on this error] {\njavascri...543184000 (Zeile 4)


Ich poste Dir gerne allen Code, der irgendwie hilft emoticon sag nur welchen.
Das lavalamp script ist aus dem Netz, nur umbenannt um Fehler bei Querreferenzen auszuschliessen.

Tut mir leid, wenn ich etwas unkoordiniert wirke : / bin leider nicht wirklich bewandert in JavaScript.
Vielen Dank nochmals!
Oliver Bayer, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Liferay Master Postagens: 894 Data de Entrada: 18/02/09 Postagens Recentes
Hi,

ich hatte heute nicht die Zeit deine Dateien in einem Theme zu deployen, aber beim kurzen Überfliegen ist mir aufgefallen, dass dein lavalamp Script noch eine Menge "$"-Zeichen enthält. Entweder du hast nur die falsche Datei upgeloaded oder du solltest mal alle "$" durch "jQuery" ersetzen.

Oli
Caroline Gessner, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Junior Member Postagens: 32 Data de Entrada: 23/11/09 Postagens Recentes
Hallöchen emoticon

wie gesagt, das LavaLamp Script habe ich nur von hier gezogen und einmal umbenannt, um sicher zu gehen, das davon keine Fehler ausgehen. Geändert habe ich daran nichts, weil ich unsicher war ob die $ darin wirklich auf für das jQuery-Objekt stehen. Werde das aber nun sofort mal ausprobieren!

Vielen Dank, mal wieder, für deine Zeit

€dit:
Leider bekomme ich immer noch beide Fehler -

FIREBUG
jQuery is not defined
[Break on this error] })(jQuery);\r\n
my_jque...valamp.js (Zeile 96)

jQuery("#1").lavaLamp is not a function
[Break on this error] jQuery("#1").lavaLamp({});\n
javascri...777870000 (Zeile 3)


SAFARI ENTWICKLER
ReferenceError: Can't find variable: jQuery
:8080/four2b-theme/javascript/my_jquery.lavalamp.js:96

TypeError: Result of expression 'jQuery("#1").lavaLamp' [undefined] is not a function.
:8080/my-theme/javascript/javascript.js?browserId=other&minifierType=js&t=1260777870000:3


€dit:
So sieht das lavalamp Script nun momentan aus:
(function(jQuery) {
jQuery.fn.lavaLamp = function(o) {
    o = jQuery.extend({ fx: "linear", speed: 300, click: function(){} }, o || {});

    return this.each(function() {
        var me = jQuery(this), noop = function(){},
            $back = jQuery('<li class="back"><div class="left"></div></li>').appendTo(me),
            $li = jQuery("li", this), curr = jQuery("li.selected", this)[0] || jQuery($li[0]).addClass("selected")[0];

        $li.not(".back").hover(function() {
            move(this);
        }, noop);

        jQuery(this).hover(noop, function() {
            move(curr);
        });

        $li.click(function(e) {
            setCurr(this);
            return o.click.apply(this, [e, this]);
        });

        setCurr(curr);

        function setCurr(el) {
            $back.css({ "left": el.offsetLeft+"px", "width": el.offsetWidth+"px" });
            curr = el;
        };

        function move(el) {
            $back.each(function() {
                jQuery(this).dequeue(); }
            ).animate({
                width: el.offsetWidth,
                left: el.offsetLeft
            }, o.speed, o.fx);
        };

    });
};
})(jQuery);
Oliver Bayer, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Liferay Master Postagens: 894 Data de Entrada: 18/02/09 Postagens Recentes
Hi,

das muss doch irgendwie zu lösen sein emoticon.

Du kannst ja vielleicht noch folgendes probieren:
- bei allen Variablendeklarationen "$" durch "var " ersetzen z.B. $back..... => var back........
- werden diese Variablen später im Quellcode verwendet entferne einfach das "$".

Oli
Caroline Gessner, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Junior Member Postagens: 32 Data de Entrada: 23/11/09 Postagens Recentes
Hallo Oli,

das werde ich sofort mal probieren.
Auch wenn wir das mit dem JavaScript erst mal zurück gestellt haben, weil es sich so wehrt.

Das es zu lösen sein sollte, hoffe ich auch, zumal es ja eigentlich irgendwo heißt das jQuery Plugins "ganz einfach" zu benutzen sein solten, mit Liferay, weil sie ja auch zusammen arbeiten.

Vielen Dank Dir mal wieder, ich geh mal testen
Oliver Bayer, modificado 14 Anos atrás.

RE: Zugriff auf Liferays eigenes jQuery Objekt?

Liferay Master Postagens: 894 Data de Entrada: 18/02/09 Postagens Recentes
Hi Caroline,

nachdem du dich nun länger nicht mehr gemeldet hast, hab ich mich mal dran gemacht und versucht das Lavalamp-Script zum Laufen zu bekommen. Falls du noch an der Lösung interessiert bist, habe ich eine gute Nachricht zu vermelden emoticon.

Die wichtigsten Dateien hab ich angehängt.

Im head-Bereich von "portal-normal.vm" musst du mit diesen zwei Zeilen die beiden benötigten Javascripts einbinden:
<script type="text/javascript" src="$javascript_folder/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="$javascript_folder/jquery_lavalamp.js"></script>


Folgenden Javascript-Code solltest du innerhalb von "portal-normal.vm" unterhalb von "#js ($js_main_file)" einfügen:
<script type="text/javascript">
jQuery(
function() {
	jQuery("#lavaLampBasicImage").lavaLamp(
		{fx: "easeOutBack", speed: 700}
	);
}
);</code></pre><br />Grüße Oli</script>