Grails - Установить «отключенное» имя атрибута и значение в GSP - PullRequest
5 голосов
/ 19 мая 2011

Я пытаюсь сделать это безуспешно:

<g:textField title="${title}" ${disabled} />

Я хочу применить атрибут disabled , ТОЛЬКО если переменная $ {disabled} равна TRUE.Я не хочу использовать условные выражения, потому что в других представлениях я получил много кода и использование операторов IF будет хаосом.

Другая вещь заключается в применении атрибута следующим образом:

<g:textField title="${title}" disabled="${disabled}" />

Но когда я добавляю атрибут disabled , содержимое переменной не меняется, оно просто всегда отключает поле.

Ответы [ 2 ]

8 голосов
/ 20 мая 2011

, если вам не нравится решение gotomanners (которое мне кажется вполне приемлемым)

<g:textField title="${title}" ${(disabled)?"disabled":""} />
7 голосов
/ 19 мая 2011

ваша $ {disabled} переменная должна возвращать «отключено», а не ИСТИНА, чтобы это работало.

РЕДАКТИРОВАТЬ

Я попробовал это и увидел проблему сон всегда отключен независимо от значения.Очевидно, простое присутствие ключевого слова disabled отключает поле, и значение, назначенное этому ключевому слову, является всего лишь фиктивным значением.

В любом случае, вот исправление.

  • Создайте класс Taglib (если у вас его еще нет)
  • определите свой собственный тег текстового поля какнапример ...

    def myTextField = { attrs, body ->
      def title = attrs.remove("title")
      def isDisabled = attrs.remove("disabled")
    
      if ("true".equals(isDisabled)) {
        out << """<input title="${title}" disabled="${isDisabled}" """
        attrs.each { k,v ->
            out << k << "=\"" << v << "\" "
          }
        out << "/>"
      } else {
        out << """<input title="${title}" """
        attrs.each { k,v ->
            out << k << "=\"" << v << "\" "
          }
        out << "/>" 
      }
    }
    
  • в вашем gsp, назовите свой текстовый тег следующим образом:

    <g:myTextField title="${title}" disabled="${disabled}" />
    
  • , добавив дополнительные атрибуты, как этотакже допустимо

    <g:myTextField class="title" name="theName" value="theValue" title="${title}" disabled="${disabled}" />
    
  • убедитесь, что ваша переменная $ {disabled} на этот раз возвращает "true" или "false" в виде строк.

...