2011-10-27 28 views

Trả lời

21

Công cụ tạo mẫu trong phiên bản 2.0 trực tiếp đến từ mô-đun scala play 1.0. Nếu bạn vẫn còn tự hỏi những lợi ích nào một ngôn ngữ chức năng như Scala mang đến hình ảnh, thì đây chắc chắn là một trong những lĩnh vực mà nó tỏa sáng.

Trình diễn:

Trong cú pháp scala, thẻ không có gì khác ngoài lệnh gọi hàm. điều thú vị là các đoạn html được coi là chính các hàm, cho phép các cấu trúc thay thế mạnh mẽ nhất.

Hãy xác định một trang html gọi mytag.scala.html

file: apps/views/mytags/mytag.scala.html

@(level:String = "error", index: Int)(body: (String) => Html) 

@level match { 

    case "success" => { 
     <p class="success" index="@index"> 
      @body("green") 
     </p> 
    } 

    case "warning" => { 
     <p class="warning" index="@index"> 
      @body("orange") 
     </p> 
    } 

    case "error" => { 
     <p class="error" index="@index"> 
      @body("red") 
     </p> 
    }  
} 

Thẻ trên mất 3 tham số trong 2 biệt các nhóm thông số:

  1. Mức, được biểu thị bằng một chuỗi (mặc định là "lỗi")
  2. Một chỉ mục
  3. Cuối cùng một hàm được gọi là nội dung, có tham số chuỗi và trả về mã HTML. Lưu ý rằng phần thân được định nghĩa trong nhóm tham số riêng của nó. nó tương đương với những gì chúng ta biết trong j2ee như một đoạn jsp jsp.

Bây giờ chúng ta hãy xem làm thế nào chúng ta có thể sử dụng thẻ này:

@import views.mytags._ 

@mytag("error",2) { color => 
    Oops, something is <span style="color:@color">wrong</span> 
} 

Trước khi chúng tôi có thể sử dụng một thẻ (hoặc chức năng), chúng ta cần để cho Chơi biết nó nằm ở nơi: đó là mục đích của nhập khẩu tuyên bố. Lưu ý rằng vị trí (đường dẫn) của tệp thẻ không liên quan miễn là bạn điều chỉnh vị trí nhập, giống như với các gói Java.

Theo dõi chính cuộc gọi đó là loại đơn giản. Tuy nhiên, lưu ý rằng chúng tôi đang chuyển một đoạn html parametrized vào thẻ.

Để biết thêm chi tiết, bạn có thể tìm thấy tài liệu scala mẫu tại đây URL

Chơi 2.0 cuối cùng sẽ đi kèm với tài liệu hướng dẫn riêng của mình.

4

Câu trả lời hoàn toàn không cần thiết nhưng chỉ để huấn luyện scala của tôi. Điều này sẽ không hoạt động và ngắn hơn trong khi vẫn rõ ràng?

@(level:String = "error", index: Int)(body: (String) => Html) 

<p class="@level" index="@index"> 
    @body(
     @level match { 
     case "success" => "green" 
     case "warning" => "orange" 
     case "error" => "red" 
     } 
    ) 
</p> 
+0

Tôi thành thật không biết, không phải chuyên gia về scala. trông giống như một câu hỏi hay về SO. –

+0

Tôi nên thử lại play2.0 sớm. Lần trước, nó thực sự là quá thô cho các thí nghiệm của tôi! Tôi không phải là một chuyên gia về Scala nhưng tôi học được rất nhiều và đó là ngôn ngữ duy nhất cho đến bây giờ mang lại cho tôi ấn tượng tôi chắc chắn có thể tắt Java ở cuối;) – mandubian

+0

Trong trường hợp này, nếu mức độ là bất cứ điều gì khác hơn là thành công, cảnh báo hoặc lỗi, bạn sẽ có thẻ ap với lớp css đó, có thể không được đánh dấu. Trong câu trả lời từ @Olivier Refalo, một thẻ P sẽ chỉ được in nếu nó khớp với một trong các mức lỗi. – user3001

0

tôi gặp phải lỗi trình biên dịch khi tôi sử dụng ví dụ đầu tiên. Xóa "chế độ xem". trong quá trình nhập đã giải quyết được sự cố

sử dụng @import mytags._

Full dụ (http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):

Let’s write a simple views/tags/notice.scala.html 
tag that displays an HTML notice: 

@(level: String = "error")(body: (String) => Html) 

@level match { 

    case "success" => { 
    <p class="success"> 
     @body("green") 
    </p> 
    } 

    case "warning" => { 
    <p class="warning"> 
     @body("orange") 
    </p> 
    } 

    case "error" => { 
    <p class="error"> 
     @body("red") 
    </p> 
    } 

} 

Và bây giờ chúng ta hãy sử dụng nó từ mẫu khác:

@import tags._
@notice ("lỗi") màu { => Rất tiếc, đã xảy ra sự cố}

Các vấn đề liên quan