Hi Mark, how about: ;;; ------------------------ ;;; *** Model MY-MODEL *** ;;; ------------------------ (defmd my-model () item-index :item-index (c-in 0)) (defobserver item-index ((self my-model)) (when new-value (format *debug-io* "~%~S: New value for slot item-index => ~S." self (item-index self)))) (defmacro mk-model (id) `(make-instance 'my-model :fm-parent *parent* :md-name ,id)) ;;; ----------------------- ;;; *** Model MY-VIEW *** ;;; ----------------------- (defmd my-view () item-index) (defmacro mk-view (id model-id) `(make-instance 'my-view :fm-parent *parent* :item-index (c? (let ((model (fm^ ,model-id))) ;; -> fm^ searches for model in the current family (item-index model))) :md-name ,id)) (defobserver item-index ((self my-view)) (when new-value (format *debug-io* "~%~S: New value for slot item-index => ~S." self (item-index self)))) ;;; --------------------------- ;;; *** Family CONTROLLER *** ;;; --------------------------- (defmd my-controller (family) ) (defmacro mk-controller (id view-id model-id) `(make-instance 'my-controller :kids (c? (the-kids (mk-model ,model-id) (mk-view ,view-id ,model-id))) :md-name ,id)) ;;; ----------------- ;;; *** TESTING *** ;;; ----------------- (defun controller-test () (let* ((self (mk-controller :controller :view :model)) (model (fm-find-kid self :model)) (view (fm-find-kid self :view))) (setf (item-index model) 1) (values))) Then: CL-USER > (controller-test) MODEL: New value for slot item-index => 0. VIEW: New value for slot item-index => 0. MODEL: New value for slot item-index => 1. VIEW: New value for slot item-index => 1. ? Cheers Frank Am 03.10.2012 um 03:47 schrieb Mark Cox:
G'day,
I think my mental model of Cells is wrong. Perhaps someone can help.
I have two model classes:
(defmodel model () ((item-index :initarg :item-index :accessor item-index)) (:default-initargs :item-index (c-in 0)))
(defmodel view () ((item-index :initarg :item-index :accessor item-index)) (:default-initargs :item-index (c-in 0)))
What I would like to do is to connect the item-index slot of an instance of MODEL to the item-index in an instance of VIEW. i.e.
(defun connect-model-and-view (model view) (setf (item-index view) (c? (item-index model))))
which does not appear to be possible.
I have navigated around the issue by introducing a third model class, CONTROLLER, that has an item-index slot initialised with (c? (item-index (^model))) and an observer that updates the view. However, I am wondering if this is the correct way as I seem to require inserting WITH-INTEGRITY in the observer.
Thanks Mark
_______________________________________________ cells-devel site list cells-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/cells-devel