![](/img/trans.png)
[英]Vapor 3 - How to populate array property of model from Leaf template form
[英]Cannot render a computed property with Leaf in Vapor 3
我一直在嘗試使用模板引擎Leaf with Vapor 3來渲染計算屬性,但到目前為止還沒有運氣。 如果存儲相同的屬性,一切正常。 如果我進行計算,則網頁中不會顯示任何內容。 我可以理解為什么這樣的解決方案不起作用的原因,但我想知道是否有任何方法可以使其工作。
要呈現的元素的代碼 :
struct SocialLinkContext: Encodable, CSSStyleable {
let hyperlinkURI: String
let classes: [String]
//let styleClasses: String
init(hyperlinkURI: String, classes: [String]) {
self.hyperlinkURI = hyperlinkURI
self.classes = classes
//self.styleClasses = classes.joined(separator: " ")
}
//Seems not to be supported by Leaf
var styleClasses: String {
return self.classes.joined(separator: " ")
}
}
main_page.leaf文件的一部分:
...
<div class="row banner">
<div class="banner-text">
<h1 class="responsive-headline">Hello, world!</h1>
<hr />
</div>
#embed("social_links")
</div>
...
social_links.leaf文件:
<ul class="social">
#for(socialContext in socialLinks) {
<li>
<a href="#(socialContext.hyperlinkURI)">
<i class="#(socialContext.styleClasses)"></i>
</a>
</li>
}
</ul>
要傳遞給View Renderer的PersonalPageContext :
struct PersonalWebPageContext: Encodable {
...
let socialLinks: [SocialLinkContext] = [...]
...
}
最后, PersonalWebPageViewController控制器:
private func serveWebPage(req: Request) throws -> Future<View> {
return try req.view().render("main_page", PersonalWebPageContext())
}
這是因為Leaf使用Codable
將您的上下文類型轉換為Leaf可以使用的數據。 現在默認情況下, Codable
不會對計算屬性進行編碼或解碼。 如果要這樣做,則必須手動實現encode(to:)
方法。
struct SocialLinkContext: Encodable, CSSStyleable {
let hyperlinkURI: String
let classes: [String]
var styleClasses: String {
return self.classes.joined(separator: " ")
}
init(hyperlinkURI: String, classes: [String]) {
self.hyperlinkURI = hyperlinkURI
self.classes = classes
}
func encode(to encoder: Encoder)throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.hyperlinkURI, forKey: .hyperlinkURI)
try container.encode(self.classes, forKey: .classes)
try container.encode(self.styleClasses, forKey: .styleClasses)
}
enum CodingKeys: String, CodingKey {
case hyperlinkURI, classes, styleClasses
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.