2012-05-16 36 views
6

Tôi đang cố gắng tìm hiểu Play 2.0 với scala nhưng tôi không nghĩ rằng tôi hoàn toàn hiểu được cách hệ thống mẫu để chơi 2.0 hoạt động. Tôi đã sử dụng chơi 1.2 trước và tôi đang tìm kiếm một tương đương với # {include 'views/blah.html' /}. Về cơ bản, tôi muốn tạo một thanh điều hướng được hiển thị trên tất cả các trang.bao gồm các tệp scala.html trong trò chơi 2.0 scala

Về cơ bản trong main.scala.html tôi có

@(title: String)(navbar: Html)(content: Html) 

<!DOCTYPE html> 

<html> 
    <head> 
    <title>@title</title> 
    <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")"> 
    <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")"> 
    <script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script> 
    </head> 
    <header> 
    This is my header 
    </header> 
    <section class="navbar">@navbar</section> 
    <section class="content">@content</section> 
    <footer> 
    This is my footer 
    </footer> 

và trong index.scala.html tôi:

@navbar = { 
<h1>Index</h1> 
<ul> 
    <li> 
     <a [email protected]>Tasks</a> 
    </li> 
</ul> 
} 
@main("Home")(navbar){ 
    content 
} 

trong task.scala.html:

@(tasks: List[Task], taskForm: Form[String]) 
@import helper._ 
@main("Home") { 
<h1>Index</h1> 
<ul> 
    <li> 
     <a [email protected]>Tasks</a> 
    </li> 
</ul> 
} { 
    task code 
} 

Bây giờ để bao gồm na này vbar có vẻ như tôi phải lặp lại điều này trong mỗi trang theo cách này tôi sẽ phải mã cứng thanh điều hướng này vào mỗi trang. Có cách nào để làm điều này mà không cần viết toàn bộ thanh điều hướng trong mỗi trang không?

Tôi cũng đã cố gắng tạo ra một tập tin có chứa navbar.scala.html

<h1>Index</h1> 
<ul> 
    <li> 
     <a [email protected]>Tasks</a> 
    </li> 
</ul> 

và tiết kiệm dưới views/sau đó nhập khẩu rằng việc sử dụng @import views.navbar nhưng sau đó tôi nhận được một lỗi nêu 'navbar chưa là thành viên của lần xem '. Tôi đang viết điều này trong Eclipse Java EE IDE indigo nếu điều đó giúp.

Trả lời

7

Dont nhập nó nhưng chỉ gọi nó là:

@navbar() 
+0

khi tôi sử dụng '@navbar' nó sẽ hiển thị này: BaseScalaTemplate ([email protected]), thay vì navbar.scala.html thực tế – Darbs

+0

bạn có thể chỉ cho chúng ta mã của bạn? – Somatik

+0

Ồ vâng, bạn có thể cần phải thêm parens. Tôi đã chỉnh sửa câu trả lời của mình. –

0

Để bao gồm bất kỳ quan điểm khác template vào một mẫu quan điểm, bạn đơn giản gọi nó là sử dụng: @views.html.[location].[location].[location]()

đâu [vị trí] chỉ là nghỉ ngơi xuống con đường của nó.

ví dụ:

@views.html.users.interface() 

Hãy chắc chắn để đưa "()" tức là dấu ngoặc ở phần cuối của báo cáo kết quả nếu nó không có bất kỳ thông số. Nếu không có "()", bạn sẽ nhận được thông báo lỗi như sau: "BaseScalaTemplate (play.api.templates ...)"

Nếu mẫu của bạn có thông số, hãy chắc chắn bao gồm chúng khi bạn gọi nó, như này:

@views.html.users.interface("name") 
Các vấn đề liên quan