有沒有辦法使用render()與片段參數,所以頁面上自動加載它滾動到頁面的特定部分?類似於我們怎麼能叫grails呈現()與片段參數
redirect(controller: "book", action: "show", fragment: "profile")
有沒有辦法使用render()與片段參數,所以頁面上自動加載它滾動到頁面的特定部分?類似於我們怎麼能叫grails呈現()與片段參數
redirect(controller: "book", action: "show", fragment: "profile")
你不能把它傳遞給render()
,因爲當你實際上調用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>
隨着各種網址:
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'
沒有辦法用上直接使用Grails呈現調用來直接定位片段,但在我的代碼中,我使用了一種解決方法,似乎只提供了大部分所需的功能,但只有一點額外的複雜性。訣竅是將所需的片段引用作爲模型的一部分傳入,然後在GSP頁面中對該引用進行操作。因此,在我的控制器的渲染調用看起來是這樣的:
def foo() {
render(view : 'foo', model:[fragment:'myFragment'])
}
然後,在普惠制下,我訪問模型以下JavaScript:然後
<g:javascript>
if ("${fragment}") {
window.location.href = "#${fragment}";
}
</g:javascript>
普惠制將告訴您的瀏覽器跳轉到頁面中所需的錨點(如果有的話)。
我現在不使用重定向()的原因是我需要保留模型。有沒有一個共同的解決方法?我想到的第一件事情是這樣的: 'code' 類{myController的高清 模型= [:] 高清富= { 渲染(視圖: '富',型號:型號) } 高清QUUX = { model.message = '你' 重定向(動作: '富',片段: '巴茲') } }'code' – Slavko
@Slavko - 我想我看到你想要做什麼;我將不得不考慮一段時間。一個選項是使用會話來保存模型,但這不是很優雅。 –
爲什麼第三個例子會滾動到'baz'錨? –