(in-package :lisp-on-lines) (deflayer dojo) (define-layered-class attribute :in-layer dojo () ((dojo-type :accessor dojo-type :initarg :dojo-type :initform nil :special t))) (defgeneric display-as-dojo-type (type attribute object component)) (defdisplay :in-layer dojo :after ((attribute standard-attribute) object) (when (dojo-type attribute) (display-as-dojo-type (dojo-type attribute) attribute object self))) (defcomponent dojo-test (window-component) ( (results :accessor results :initarg :results))) (defmethod render ((self dojo-test)) (<:as-is (js:js* `(array ,@(loop for r in (results self) for n upfrom 0 collect `(array , (with-output-to-string (s) (yaclml:with-yaclml-stream s (display self r :type 'as-string))) ,n)))))) (defmethod display-as-dojo-type ((type (eql 'combo-box)) attribute object component) (let* ((search-function (search-function attribute)) (select-function (select-function attribute)) (select-callback (ucw::make-new-callback (lambda (x) (warn "setting index to ~A" (parse-integer x)) (funcall select-function (parse-integer x)))))) "The combo box widget" (