2011-02-03 3 views
6

У меня есть плагин Grails, который я использую как в основном контейнер для некоторых общих статических ресурсов, которые будут использоваться различными другими собственными проектами Grails (CSS, JS-файлы и т. Д.). Идея использования плагина заключалась только в том, чтобы разделить эти вещи - плагин действительно не делает ничего интересного. Каков наилучший способ прямого ссылки на ресурсы внутри плагина? Я бы предпочел не создавать пользовательские taglib, так как я не добавляю здесь никакой функции; Я просто хочу, доступ к ресурсам внутри плагина - что-то вроде этого, например, для ссылки на файл CSS из GSP:Grails: Как ссылаться на ресурс, расположенный внутри установленного плагина?

<g:link rel="stylesheet" url="${resource(dir:'css', file:'mycss.css', 
plugin:'myplugin')}"/> 

Нарушает ли эта идея концепции плагинов, где только некоторые аспекты этого должны быть выставлен, а остальное - черный ящик? Также приветствуются альтернативные подходы к обмену статическими ресурсами между связанными с ними проектами Grails, в случае, если я пойду по безумному, неправильному пути, даже попробовав это. :)

ответ

3

Во-первых, в Grails плагин не считается черным ящиком. Напротив, весь код открыт; если вы действительно хотите сделать это черным ящиком, тогда вы должны использовать другой плагин, Binary Artifacts.

Во-вторых, ваш подход очень разумный. Чтобы получить доступ к ресурсам плагина, я бы создал TagLib вроде:

def res = { attrs -> 
    attrs.dir=pluginContextPath 
    //Do whatever you want here 
    out << g.resource(attrs) 
} 

и называть его так же, как <g:resource>. Таким образом, вам даже не нужно раскрывать путь ресурсов вашего плагина. Этот подход используется в Nimble plugin.

Также вы можете взглянуть на Grails Resources plugin, который пытается справиться с кошмаром статических зависимостей ресурсов среди плагинов и проектов Grails. Я никогда не использовал его, но наверняка в моем следующем проекте Grails я его интегрирую (BTW, он будет включен в Grails 1.4).

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