2013-12-12 16 views
6

Tôi đang thử các tham chiếu về tùy chọn loại trong mẫu Scala Play của tôi. Tôi đã cố gắng sử dụng tài nguyên này: http://www.playframework.com/modules/scala-0.9/templatesXử lý các tùy chọn trong Mẫu Scala Play

Đây là cách tôi đang cố gắng để tham khảo một lĩnh vực trong lớp trường hợp:

@{optionalobject ?. field} 

và nó không được làm việc, đây là lỗi Tôi nhận được :

';' expected but '.' found. 

Tôi không chắc tại sao tôi gặp phải lỗi này.

Trả lời

5
@optionalobject.map(o => o.field).getOrElse("default string if optionalobject is None") 
0

Đánh giá theo thẻ của bạn bạn đang sử dụng biến thể Play 2.x, nhưng bạn đang tham chiếu tài liệu từ mô-đun có nghĩa là Play 1.x.

Giả sử trận đấu loại của bạn, tôi tin rằng những gì bạn đang tìm kiếm là một cái gì đó như:

@optionalobject.getOrElse(field) 
+0

Điều này không hoạt động. Người ta nói rằng lĩnh vực này không tồn tại. Tuy nhiên, nó phải tồn tại. Khi chỉ xuất ra trường hợp, nó hiển thị tất cả các trường của lớp chữ. –

+0

@ Lilluda5 Chỉnh sửa câu hỏi của bạn và hiển thị thêm mã của bạn. Làm thế nào bạn khai báo 'optionalobject' và' field'? – estmatic

21

Đối với định dạng đẹp hơn một chút mà có thể span nhiều dòng (nếu bạn cần):

@optionalObject match { 
    case Some(o) => { 
    @o.field 
    } 
    case None => { 
    No field text/html/whatever 
    } 
} 

Hoặc nếu bạn không muốn hiển thị bất kỳ điều gì nếu trường không được xác định:

@for(o <- optionalObject) { 
    @o.field 
} 
+1

Đoạn mã thứ hai cho _display không có gì nếu trường không được xác định_ trường hợp sử dụng là đáng yêu. Tôi tiếp tục chú ý đến thực tế là '' Option'' là một loại sưu tập, cho phép bạn làm những việc như thế này. – avik

0

Một khả năng khác là sử dụng bản đồ, cú pháp tôi thích để pha trộn với HTML

@pagination.next.map { next => 
    <a href="@Routes.paginated(next)"> 
    @HtmlFormat.escape("Next >>>") 
    </a> 
} 
0

Đôi khi nó có thể được thuận tiện để viết một helper ngắn khi giao dịch với Option để dọn dẹp các mẫu mã:

// Helper object is defined in some file Helper.scala 
    object Helper { 
    def maybeAttribute[T](attrName:String, maybeValue:Option[String]) = 
     maybeValue.fold("") { value => 
     Html(attrName + "=" + value).toString() 
     } 
    } 

Sau đó, mẫu có thể sử dụng phương thức trợ giúp này trực tiếp như

// some view.scala.html file 
    <div @Helper.maybeAttribute("id",maybeId)> 
    </div> 
Các vấn đề liên quan