Синтаксис Грааля / шпунтовых скобок - PullRequest
1 голос
/ 02 августа 2011

Я работаю с примером, который я не могу понять, что делают фигурные скобки - те, которые находятся вокруг "Logout" во втором утверждении "out" ниже. Я предполагаю, что строка передается как закрытие, но я не получаю синтаксис выше этого. Можете ли вы уточнить? Обратите внимание, что вывод кода выглядит следующим образом:

Джон Доу [Выйти]


class LoginTagLib {
  def loginControl = {
    if(request.getSession(false) && session.user){
      out << "Hello ${session.user.login} "
      out << """[${link(action:"logout",
             controller:"user"){"Logout"}}]"""
     } else {
       out << """[${link(action:"login",
       controller:"user"){"Login"}}]"""
     }
   }
}

Большое спасибо

Ответы [ 3 ]

4 голосов
/ 02 августа 2011

Тег link принимает атрибуты и тело, и как обычный тег GSP он называется так:

<g:link action="logout" controller="user">Logout</g:link>

Чтобы вызвать его как метод, который вы делаете, вам нужен способ передать текст ('Logout') для отображения в ссылке. Если вы посмотрите на источник тега (нажмите «Показать источник» внизу http://grails.org/doc/latest/ref/Tags/link.html), вы увидите, что 2-й аргумент - body, и это - Closure (хотя это не ясно из кода , но это всегда так для тегов с двумя параметрами). {"Logout"} - это Closure, которое возвращает «Logout», поскольку оно является последним выражением, поэтому оно используется как тело.

2 голосов
/ 02 августа 2011

На самом деле вывод должен быть

Hello John Doe [Logout]

По сути, если есть сеанс и пользователь пишет Hello пользователь и создает ссылку, указывающую на действие выхода из системы с меткой Logout.

{"Logout"} является закрытием, эквивалентным {return "Logout"; } , поскольку последний оператор используется для возвращаемого значения, если явно не указано ни одного.

0 голосов
/ 23 апреля 2014

Я не могу получить вывод, как показано ниже

Hello John Doe [Logout]

Вот вывод, который я получаю

Здравствуйте, jdoe [ Выйти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...