- Aufruf einer controller-Methode in Spielen! Vorlage
Wie kann ich den Aufruf einer controller-Methode in einem Spiel! Vorlage?
Habe ich ein Standard-controller, der Anwendung und der hasliked () - Methode innerhalb dieses Controllers.
Die Methode gibt zurück, ob der Benutzer eingeloggt ist, hat gerne die post-ID.
Es gibt "keine" aus, wenn der Benutzer gerne die post, sonst gibt es "block" (für die CSS)
Habe ich die folgende route: GET /hasliked/{id} Anwendung.hasliked
Ich habe versucht, die folgenden:
#{list items:postList, as:'post'}
%{
display = Anwendung.hasliked(post.id);
%}
<div style="display: ${display}">...</div>
#{/list}
Aber ich bekomme diese Fehlermeldung:
Vorlage execution error
Ausführung Fehler aufgetreten ist in der Vorlage /app/views/Application/dashboard.html. Ausnahme ausgelöst wurde NullPointerException : Cannot invoke method hasliked() auf null-Objekt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit einem voll qualifizierten Namen wie:
BEARBEITEN auf Bemerkung:
Des Problems mit der Ausnahme ist, dass Sie Zugriff auf den controller zu bekommen einen Wert. Das ist falsch.
Controller in Spielen verwendet werden, um zu navigieren. Sie sind statisch, Sie wieder "leere", und Sie machen einen Anruf auf ein anderes controller-Methode oder um eine render-Methode. Was Sie versuchen zu tun, kann zu unerwarteten Ergebnissen führen.
Was Sie wollen zu tun ist, um den Wert in der Steuerung und übergeben Sie es als parameter:
Das ist der empfohlene Weg.
Der Ausnahme, die Sie bekommen ist (wahrscheinlich) verursacht, weil Ihre Anwendung.hasLiked() endet mit einem redirect-Aufruf (entweder render() oder Anruf auf ein anderes controller-Methode) und das ist passiert, während Sie das Rendern der Seite entspricht der erste Aufruf. So bricht es.
Wäre es wahrscheinlich ein besserer Weg, um füllen Sie die erforderlichen Informationen in der Liste der Elemente, statt Rückruf der controller:
Wenn Sie wirklich müssen tun (und wieder, Sie sollten nicht) Sie brauchen, um vollständig zu qualifizieren, der name des Prüfers:
genau wie Pere Villega hingewiesen.
hasliked = controllers.Application.hasliked(post.id);
ich bekommen:RuntimeException occured : play.mvc.results.Redirect
und der Fehler ist auf der Linierender(postlist);
Alternative zu dieser werden kann, um die Ausgabe eines AJAX-Aufruf, um den Stil, anstatt mit dem controller.
Legen Sie den Stil Ihrer "gefallen" - element zu
display: none
standardmäßig, und wenn die view gerendert wurde, führen Sie einen GET-request an/hasliked/
mit der ID als parameter und aktualisieren Sie Ihre CSS-Stile entsprechend anpassen: wenn der Benutzer hat sich nicht schon gewünscht, dass diese, Ausgabefalse
(oder was auch immer Sie wollen), so dass Sie können JavaScript verwenden, um re-definieren den Stil.Der einfachste Weg, dies zu tun wäre, um jQuery verwenden, um eine Anfrage an den controller, wenn der view geladen wurde. Haben Sie einen Blick auf die Spielen! Dokumentation AJAX für einige inspiration. Beachten Sie, dass Sie nicht haben, zu verwenden
#{jsAction /}
an alle - ich persönlich finde es einfacher zu definieren, die jQuery ruft mich.Versuchen Sie Folgendes: