Moin, moin liebe Forumsteilnehmer und Experten von der Küste,
ich habe hier einen Sachverhalt, der mir schon seit einiger Zeit das Gehirn schmelzen lässt. Bevor ich jetzt weitergrübel, möchte ich sichergehen, dass die Idee überhaupt umsetzbar ist und bin für jeden Tipp / für jede Antwort dankbar!
Es geht hierbei um eine mittels Zope 3 / Grok erstellte Webanwendung. Genutzt wird eine SQL-Datenbank.
Daten dieser Datenbank werden auf einer Seite angezeigt und es gibt zwei Arten der weiteren Verarbeitung (grok.action (bearbeiten und loeschen). Sowohl das Bearbeiten als auch das Löschen funktionieren reibungslos. Beim Löschen ist allerdings der Datensatz sofort ohne weiter nachzufragen weg.
Zum Nachfragen gibt es bekanntlich die JavaScript-Anweisung "onClick="return window.confirm('Loeschen?')". Diese kann ich im PageTemplate aber scheinbar nicht sinnvoll einbauen, da die Verlinkung in der Python-Datei erfolgt.
An der entsprechenden Stelle sieht das PageTemplate wie folgt aus:
<tr class="controls">
<td>
<input tal:repeat="action view/actions"
tal:replace="structure action/render" />
</td>
</tr>
Das Python-Coding hat folgenden groben Aufbau:
@grok.action(_u(u'Loeschen'))
def loeschen(self, **kw):
context = self.context
...
...
store = getUtility....
delbef = store.find.....
delbef.remove()
url = 'xyz'
self.redirect(url)
Jetzt stellt sich die Frage, ob es überhaupt grundsätzlich möglich ist, in diesem Fall das "onClick" anzuwenden oder ob es nicht sinniger wäre, im Python auf eine Zwischenseite zu verweisen, wo dann nachgefragt wird und je nach Antwort dann mit delbef redirected oder eben ohne delbef weitergeleitet wird.
Ferner besteht m.E. noch die Möglichkeit, die URL's im Template zu generieren und dann beim HREF das "onClick" mit einzubauen.
Was wäre Eurer Meinung nach die sauberste Alternative? Habe ich etwas übersehen? Vielen lieben Dank.
Hazel75
Einbinden eines Bestätigungfeldes (onClick) in grok.action
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Das ist ja eher ein HTML-Javascript-Problem, und kein Python-Problem. Code solltest du trotzdem in Codetags rein machen :)
Wie siehts damit aus?
Wie siehts damit aus?
Code: Alles auswählen
<a href="foo" onClick="if(!confirm('foo?')) return false" >foo</a>
Hallo Dauerbaustelle,
danke erstmal für die Antwort. In meinen Augen ist es doch ein Python-Problem, da ich im HTML keine weiteren Verlinkungen vornehme.
Die Logik der Weiterleitung auf die Bearbeitungsseite bzw. das Löschen und Weiterleiten beim Drücken des Löschbuttons erfolgt komplett im Pythoncode:
Das onClick kann ich nicht im Python-Code verwenden und "a href" gibt es nicht im Page Template... oder ich habe eine Gedankenfehler...
danke erstmal für die Antwort. In meinen Augen ist es doch ein Python-Problem, da ich im HTML keine weiteren Verlinkungen vornehme.
Code: Alles auswählen
<tr class="controls">
<td>
<input tal:repeat="action view/actions"
tal:replace="structure action/render" />
</td>
</tr>
Code: Alles auswählen
@grok.action(_u(u'Loeschen'))
def loeschen(self, **kw):
context = self.context
...
...
store = getUtility....
delbef = store.find.....
delbef.remove()
url = 'xyz'
self.redirect(url)
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Naja, dann tu das onclick-Zeug halt in das HTML-Element rein, das die Löschvorgang aufruft (Hyperlink, Submit-Button o.ä.).
Gruß
Gruß
Genau das ist das Problem. Es gibt keinen Hyperlink und keinen Submit-Button.Dauerbaustelle hat geschrieben:Naja, dann tu das onclick-Zeug halt in das HTML-Element rein, das die Löschvorgang aufruft (Hyperlink, Submit-Button o.ä.).
Gruß
Der Hyperlink erfolgt im Python-Code durch:
Code: Alles auswählen
self.redirect(url)
Code: Alles auswählen
@grok.action(_u(u'Loeschen'))
Code: Alles auswählen
<input tal:repeat="action view/actions"
tal:replace="structure action/render" />
Und dort kann ich das OnClick-Zeugs reinwurschteln, wie ich lustig bin - es passiert nichts.
Lieben Gruß
Naja, du ersetzt ja mit tal:replace den kompletten Tag, also musst du das irgendwo auf der Python-Seite rendern. Evtl. hat der action-Decorator da eine entsprechende Option. Am besten wäre imo aber eh eine Zwischenseite da a) confirm() das nervigste ist, was es gibt(modale Dialoge sollte man imo nur verwenden, wenn es unbedingt nötig ist, also quasi nie) und b) das sowieso nur funktioniert, wenn Javascript angeschaltet ist.Hazel75 hat geschrieben:Und dort kann ich das OnClick-Zeugs reinwurschteln, wie ich lustig bin - es passiert nichts.
Yupp - das ist doch eine Ansage (bin mit Java nicht so bewandert) - werde mich dann mal auf diesen Weg begeben. Danke schön!Darii hat geschrieben:da a) confirm() das nervigste ist, was es gibt(modale Dialoge sollte man imo nur verwenden, wenn es unbedingt nötig ist, also quasi nie) und b) das sowieso nur funktioniert, wenn Javascript angeschaltet ist.Hazel75 hat geschrieben:Und dort kann ich das OnClick-Zeugs reinwurschteln, wie ich lustig bin - es passiert nichts.
Hm, das ist dann ja genau die Bestätigung meiner Aussage, dass ich mich mit Java und Java Script nicht auskenne.Leonidas hat geschrieben:JavaScript != Java. Die Sprachen könnten kaum unterschiedlicher sein.
Habe den Sachverhalt jetzt mit einer "Zwischenseite" gelöst. Thema kann geschlossen werden.
Danke!