Grails render () с параметром фрагмента - PullRequest
2 голосов
/ 28 июля 2011

Есть ли способ использовать render () с параметром фрагмента, чтобы при загрузке страницы он автоматически прокручивался до определенной части страницы? Аналогично тому, как мы можем назвать

redirect(controller: "book", action: "show", fragment: "profile")

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Вы не можете передать его на render(), поскольку к тому моменту, когда вы фактически вызываете render(), URL-адрес уже определен и сопоставлен с вашим действием; все, что делает render, это контролирует то, что записывается обратно в ответ.

Фрагмент должен быть уже в URL , прежде чем будет вызвано действие контроллера рендеринга. Вот пример:

grails-app/controllers/MyController.groovy

class MyController {
    def foo = {
        render(view: 'foo')
    }

    def quux = {
        redirect(action: 'foo', fragment: 'baz')
    }
}

grails-app/views/my/foo.gsp

<html>
  <head>
    <title>Foo</title>
  </head>
  <body>
    <a id="bar">Bar</a>
    <g:each in="${0..100}"><br/></g:each>
    <a id="baz">Baz</a>
  </body>
</html>

С различными URL:

http://example.com/myapp/my/foo     - doesn't scroll to an anchor
http://example.com/myapp/my/foo#baz - scrolls to the 'baz' anchor
http://example.com/myapp/my/quux    - scrolls to the 'baz' anchor'
1 голос
/ 19 января 2015

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

def foo() {
    render(view : 'foo', model:[fragment:'myFragment'])
}

, затем, в GSP, я получаю доступ к модели со следующим Javascript:

<g:javascript>
    if ("${fragment}") {
        window.location.href = "#${fragment}";
    }
</g:javascript>

Тогда GSP будетпопросите браузер перейти к нужной привязке на странице (если есть).

...