首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Leaf中的蒸汽3渲染复杂调用

Leaf中的蒸汽3渲染复杂调用
EN

Stack Overflow用户
提问于 2019-12-29 07:24:05
回答 1查看 158关注 0票数 1

下面是与我的API一起工作的调用,但我需要在叶子中呈现结果。目前,这与API一起工作得很好。只是不知道我是怎么把队伍拉过来的。

代码语言:javascript
复制
func getTeamsWithUsersForEvent(_ req: Request) throws -> Future<[TeamWithUsers]> {
        let currentID =  try req.parameters.next(Int.self)
        print("currentID \(currentID)")
        return Team.query(on: req).filter(\Team.eventID == currentID).sort(\Team.rawScore, .descending).range(..<5).all().flatMap(to: [TeamWithUsers].self) { team in
            try team.map { team in
                try team.users.query(on: req).all().map { users in
                    var score: Int
                    if users.isEmpty {
                        score = 0
                    }else{
                        score = team.rawScore / users.count
                    }
                    return TeamWithUsers(
                        id: team.id,
                        name: team.name,
                        icon: team.icon,
                        eventID: team.eventID,
                        rawScore: team.rawScore,
                        //users: users,
                        count: users.count,
                        teamScore: score
//                        teamScore: team.rawScore / users.count
                    )
                }
            }.flatten(on: req)
        }
    }

struct TeamWithUsers: Content {
    let id: Int?
    let name: String
    let icon: String
    let eventID: Event.ID
    let rawScore: Int
    //let users: [User]
    let count: Int?
    let teamScore: Int
}

这是我开始做的事情。这就是我的背景。

代码语言:javascript
复制
struct AllTeamsContext: Encodable {
  let title: String
  let teams: [TeamWithUsers]
}

我已经创建了名为"Leaders“的Leaf模板,它只显示一个每行包含TeamWithUsers的表。

代码语言:javascript
复制
#if(count(teams) > 0) {
  <table class="table table-bordered table-hover">
    <thead class="thead-light">
      <tr>
        <th>Name</th>
        <th>Icon</th>
        <th>Score</th>
      </tr>
    </thead>
    <tbody>
      #for(team in teams) {
        <tr>
          <td>#(team.name)</td>
          <td>#(team.icon)</td>
          <td>#(team.teamScore)</td>
        </tr>
      }
    </tbody>
  </table>
} else {
  <h2>There aren’t any teams yet.</h2>
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-29 23:03:56

编辑:根据评论中的附加信息更改答案。

虽然您可以更改现有函数以直接返回视图,但我个人会让它保持原样,并在呈现视图的那一秒调用它。尝试将其放入与当前函数相同的路由器中:

代码语言:javascript
复制
func teamsView(_ req: Request) throws -> Future<View> {
   let currentID =  try req.parameters.next(Int.self)
   let teamsContext = getTeamsWithUsersForEvent(request, currentID)
   return request.view().render("Leaders", teamsContext )
}

然后,在您的routes.swift或等效程序中,放入:

代码语言:javascript
复制
router.grouped("admin","teams") teamsRoute.get("leaders", Int.parameter, use: teamsView)

将参数移动到上面的tsamsview函数中,然后您需要将原始函数头修改为:

代码语言:javascript
复制
func getTeamsWithUsersForEvent(_ req: Request, _ currentID:Int) throws -> Future<[TeamWithUsers]>

然后从这个函数中删除您的原始参数提取。

当您的路由器分组后,您的视图应在以下位置可见:

代码语言:javascript
复制
http://localhost:8080/admin/teams/nnn/leaders

其中nnn是将被转换为currentID的内容。

或者:

如果这变得有点混乱(尽管我第一次评论更喜欢将函数分开),您总是可以将现有函数更改为:

代码语言:javascript
复制
func getTeamsWithUsersForEvent(_ req: Request) throws -> Future<View> {
    let currentID =  try req.parameters.next(Int.self)
    print("currentID \(currentID)")
    let teamContext = Team.query(on: req).filter(\Team.eventID == currentID).sort(\Team.rawScore, .descending).range(..<5).all().flatMap(to: [TeamWithUsers].self) { team in
        try team.map { team in
            try team.users.query(on: req).all().map { users in
                var score: Int
                if users.isEmpty {
                    score = 0
                } else {
                    score = team.rawScore / users.count
                }
                return TeamWithUsers(
                    id: team.id,
                    name: team.name,
                    icon: team.icon,
                    eventID: team.eventID,
                    rawScore: team.rawScore,
                    //users: users,
                    count: users.count,
                    teamScore: score
                )
            }
        }.flatten(on: req)
    }
    return request.view().render("Leaders", teamContext )
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59515713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档