украсить тег Grails - PullRequest
       7

украсить тег Grails

0 голосов
/ 20 апреля 2011

Плагин taglib, предоставляемый плагином Grails fields , использует соглашение об именах для определения ключа метки, который следует использовать для каждого элемента <input>, который он генерирует.Я хотел бы изменить детали этого соглашения без непосредственного изменения исходного кода плагина.

Подход, который я рассматриваю, заключается в создании собственного тега lib

class MyBeanTagLib {

  static namespace = 'mybean'

  private void setLabelKey (attrs) {

    if (!attrs.labelKey) {

      // in reality calculation of the default key is a bit more complicated :)
      attrs.labelKey = 'my.default.key'
    }
    return attrs
  }

  // renders a combo box
  def select = { attrs ->
     attrs = setLabelKey(attrs)

     // Now call the bean-fields select tag, passing along attrs     
  }

  // renders a datePicker
  def date = { attrs -
     attrs = setLabelKey(attrs)

     // Now call the bean-fields date tag, passing along attrs     
  }
}

Мой первый вопросКак вызвать тег, который я пытаюсь украсить.Другими словами, какой код должен заменить комментарий

// Теперь вызовите поля bean-компонентов ...

Я мог бы сделать это:

new BeanTagLib().select(attrs)

Но я сомневаюсь, что это правильный способ вызывать один taglib из другого.

Во-вторых, есть ли более элегантный способ украсить taglib, чем этот?На самом деле тегов гораздо больше, чем просто select и date, которые мне нужно декорировать, и код в каждом теге декорирования будет практически идентичен.Я хотел бы устранить это дублирование, если это возможно?

1 Ответ

0 голосов
/ 21 апреля 2011
  1. Вызывать теги других тегов-тегов по их пространству имен, например g.link([controller: 'one'], { 'link text' }) или bean.select(attrs).

  2. Вы можете попробовать написать getProperty в вашем taglib и верните правильные замыкания - я не уверен.

...