musikinformatik-wise-24.org
Wichtiger Hinweis
Die Funktion #'set-on-new-window
muss im vorigen Beispiel
jedesmal neu ausgeführt werden, wenn die Funktionsdefinition von
slider-gui geändert und evaluiert wurde, da #set-on-new-window
eine Assoziation zwischen der URL Seite und dem kompilierten
Funktionsobjekt zum Zeitpunkt ihres Aufrufs (compile-time)
herstellt. Spätere Änderungen von slider-gui werden nicht
berücksichtigt, da eine Re-Evaluation der Funktionsdefinition ein
neues Funktionsobjekt erzeugt.
Wenn man möchte, dass ein Reload der URL immer die aktuelle
Definition von #'slider-gui lädt, kann man das durch eine
Indirektion erreichen, indem man die Funktion, die mit
#'set-on-new-window
assoziiert wird, als Hilfsfunktion
verwendet. Diese Hilfsfunktion enthält einen Aufruf von
#'slider-gui. Die assoziierte Hilfsfunktion ändert sich nicht,
ruft aber beim Laden der Browserseite immer die zu diesem
Zeitpunkt (run-time) aktuelle Definition von #'slider-gui auf:
(in-package :clamps) (defparameter *slider1* (make-ref 0.0)) (defun slider-gui (body) "handler for /slider-gui." (setf (title (html-document body)) "Slider") (create-o-slider body (bind-refs-to-attrs *slider1* "value") :min 0 :max 127 :direction :up :css `(:display "inline-block" :margin "0.5em" :background "white" :height "90%" :width "2em"))) (defun call-current-gui-def (body) "helper function calling the current definition of #'slider-gui at the time of URL reload." (slider-gui body)) (set-on-new-window #'call-current-gui-def :path "/slider-gui")
Created: 2025-02-12 Mi 20:35