gpt4 book ai didi

swift - 无法在 Vapor 3 中使用 Leaf 渲染计算属性

转载 作者:搜寻专家 更新时间:2023-10-31 08:28:13 27 4
gpt4 key购买 nike

我一直在尝试使用带有 Vapor 3 的模板引擎 Leaf 来渲染计算属性,但到目前为止还没有成功。如果存储相同的属性,则一切正常。如果我计算它,网页中不会显示任何内容。我能理解为什么这种解决方案不起作用的原因,但我想知道是否有任何方法可以让它起作用。

要呈现的元素的代码:

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 渲染器的PersonalPageContext:

struct PersonalWebPageContext: Encodable {
...
let socialLinks: [SocialLinkContext] = [...]
...
}

最后,PersonalWebPageViewController Controller :

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
}
}

关于swift - 无法在 Vapor 3 中使用 Leaf 渲染计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53631110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com