2015-04-17 3 views
1

Когда я пытаюсь скомпилировать метод рендеринга объекта, показанный здесь, в документации http://restas.lisper.ru/en/manual/special-pages.html,Что представляют собой объекты рендеринга restas?

(defmethod restas:render-object ((designer mydrawer) 
           (code (eql hunchentoot:+http-internal-server-error+))) 
    (setf (hunchentoot:content-type*) "text/plain") 
    "Oh, all very bad") 

дает

There is no class named RESTAURANT::MYDRAWER SIMPLE-ERROR 

Как работают эти рендер-объект рюшечки?

+0

Чтобы лучше понять это, вы должны прочитать о общих функциях: http://www.gigamonkeys.com/book/object-reorientation-generic-functions.html В вашем случае у вас нет класса 'mydrawer 'в вашем текущем пакете –

ответ

0

render-object - это общая функция, которая принимает объект рендеринга, который является либо объектом, переданным в :render-method для define-route, либо значением , а также объектом рендеринга. Затем он отображает этот объект (обычно как текст, хотя вы, вероятно, могли бы также преобразовать его в массив октетов).

В примере предполагается, что у вас есть класс под названием mydrawer. Для того, чтобы получить эту работу вам нужно будет сделать что-то вроде следующего:

(defclass mydrawer()()) 
(defmethod restas:render-object ((designer mydrawer) 
           (code (eql hunchentoot:+http-internal-server-error+))) 
    (setf (hunchentoot:content-type*) "text/plain") 
     "Oh, all very bad") 
(defmethod restas:render-object ((designer mydrawer) obj) 
    ;; Default rendering of objects goes here, 
    ;; this will just call the default render method 
    (restas:render-object nil obj)) 

И затем использовать экземпляр mydrawer как метод визуализации или для отдельных маршрутов или для restas модуля.

Смежные вопросы