Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Grails - cách gán dữ liệu từ view ngược lên layout
Do cơ chế render tuyệt vời của Grails mà chúng ta có thể khai báo sử dụng các biến ở các layout mà có thể thay đổi từ view được.
Bí quyết nằm ở thuộc tính scope
với giá trị là request
của tag <g:set>
Cách sử dụng như sau:
Ở layout
Khai báo ở đầu trang
<g:set var="_variables" value="[_page_heading: '', _page_small_title: '']" />
<g:each in="${_variables}" var="_tmpVariable">
<g:if test="${request[_tmpVariable.key] == null}">
<g:set var="${_tmpVariable.key}" value="${_tmpVariable.value}" scope="request" />
</g:if>
</g:each>
Ta khai báo một biến tên _variables
sẽ là nơi chứa các biến và dữ liệu mặc định mà ta sẽ khai báo.
Ở phần tag <g:each>
chúng ta sẽ lặp qua các biến cần khởi tạo, xem sét biến nào chưa có thì sẽ khởi tạo cùng với dữ liệu mặc định của biến đó.
Chú ý: do các biến được gán trực tiếp vào biến requets
nên cần đảm bảo các biến cần tạo không gây nhầm lẫn với các biến đã có trong request
.
Sử dụng
<g:if test="${request._page_heading}">
<h1 class="page-heading">${request._page_heading}</h1>
</g:if>
<g:if test="${request._page_small_title}">
<h4 class="small-title text-uppercase">${request._page_small_title}</h4>
</g:if>
Ở view
Khai báo các biến cần thay đổi ở layout
<g:set var="_page_heading" scope="request">
Nhóm Thành Viên
</g:set>
<g:set var="_page_small_title" scope="request">
Nhóm thành viên - ${user_group.groupName}
</g:set>


