最近发现了weblocks的活动分支,我想将其与ORM库mito结合使用。
Weblocks定义了一个宏JList
,实际上它像这样包装defwidget
:
defclass
与此同时,美图的工作方式如下:
(defclass my-class ()
((slot))
(:metaclass weblocks/widgets/mop:widgets-class))
我该如何做到以下几点?
(defclass my-class ()
((...))
(:metaclass mito:dao-table-class))
我尝试了继承,但是以某些不同的方式失败了。我只用了很短的时间就使用了CLOS。因此,我无法在频谱上进行测量
“我很愚蠢<=====>这是不可能的”
我站着。任何帮助将不胜感激。
答案 0 :(得分:8)
我尝试了继承,但是以某些不同的方式失败了。我只 短时间使用了CLOS。因此,我无法测量 光谱...
别担心,直接跳转到对CLOS缺乏经验的元对象当然是困难的,我建议您阅读元对象协议的艺术(Gregor Kiczales和Jim Des Rivieres的作品,也称为“ AMOP”)。 Robert Strandh在http://metamodular.com/CLOS-MOP上有第5章和第6章的HTML版本。
您要定义一个混合元类,该继承自这两个元类。
(defclass hybrid-metaclass (mito:dao-table-class
weblocks:widget-class)
())
如果使用上述元类定义一个类,则会出现以下警告:
;; WARNING: #<HYBRID-METACLASS COMMON-LISP-USER::MY-WIDGET {100B8FE683}> is not
;; defined to be a subclass of WEBLOCKS:WIDGET; consider adding WEBLOCKS:WIDGET
;; or a subclass thereof to the superclass list
widget-class
元类期望其所有类都继承自基类weblocks:widget
。
让我们为混合元类定义这样的基础对象:
(defclass hybrid-widget (weblocks:widget) ()
(:metaclass hybrid-metaclass))
这里,hybrid-widget
继承自weblocks:widget
,并具有元类hybrid-metaclass
。您所有的窗口小部件都应继承自此类,并具有元类hybrid-metaclass
(随时可以找到更好的名称)。
答案 1 :(得分:2)
即使有可能按照@coredump的建议进行解决,我也不建议您在一个类中混合使用模型(存储和业务逻辑)和小部件(这些对象的表示形式)。
通常,我用指向对象的插槽来定义我的小部件。这样,您还可以定义包含对象列表的小部件。当使每个单独的对象没有意义的小部件时,这很有用。
当您需要与其他块分开更新对象的表示形式以响应某些动作(例如,将任务标记为“完成”)时,只需在对象和小部件之间建立1-1链接即可。