【问题标题】:Move Through Object List在对象列表中移动
【发布时间】:2012-12-31 19:51:45
【问题描述】:
<div id="team-name">{{teams[0].name}}</div>
<button id="next">Next</button>

当点击“下一个”按钮时,我希望团队名称成为列表中的下一个团队名称,即 0 变为 1?

我觉得我需要 JS 来做这件事 - 但我不确定我将如何使用 JS 来做这件事。

此外,列表是从服务器生成的。

更新

{{ }} 是模板系统的一部分 - 准确地说是 Jinja2。

团队列表通过 Jinja2 传递到网页中 - 因此网页可以访问整个团队列表 - 我希望这是有道理的。

class Team(db.Model):
    __tablename__ = 'Team'
    name = db.Column(db.String(21))
    matches_total = db.Column(db.Integer())
    matches_won = db.Column(db.Integer())
    matches_lost = db.Column(db.Integer())

【问题讨论】:

  • {{ }} 表示法是模板系统的一部分,还是您只是表明您想要其中的值?
  • {{ }} 是模板系统的一部分——准确地说是 Jinja2。也会通过澄清更新问题。
  • 列表中的其他条目是否在某处可用?如果没有服务器端代码,您将无法做到这一点。
  • 您的teams 数组是什么样的? (我假设它是一个对象数组,从符号)
  • ^是的,它是一个对象数组

标签: javascript jquery html jinja2


【解决方案1】:

制作一个包含team_names 可用名称的列表,并像这样更新您的模板:

<div id="team-name" data-index="0" data-entries="{{ team_names|tojson }}">{{teams[0].name}}</div>
<button id="next">Next</button>

如果您使用的是烧瓶,似乎是这种情况,请将其传递给您的render_template() 电话:

team_names=[t.name for t in Team.query]

然后你可以使用下面的jQuery sn -p 来做你想做的事:

$('#next').on('click', function(e) {
    e.preventDefault();
    var nameElem = $('#team-name');
    var entries = nameElem.data('entries');
    var index = (nameElem.data('index') + 1) % entries.length;
    nameElem.text(entries[index]).data('index', index);
})

注意:此答案假设列表不是太大。

【讨论】:

  • 50 件物品是否太大?
  • 我收到以下错误:TypeError: is not JSON serializable
  • 仔细阅读我的回答。您应该创建一个仅包含名称的列表 - 而不是 Team 对象。
  • 是的,你指出了我的确切错误,哈哈#signsofanawesomeprogrammer。谢谢,这成功了,所以如果我想更新我的程序,matches_total/won/lost 等,我只是为他们做同样的技术,对吧?
  • 然后你可能想要对 Team 对象进行 json 序列化(只需添加一个在 dict 中返回有趣值的方法),这样你就不需要大量的数据属性了。
猜你喜欢
  • 2018-11-18
  • 2016-10-26
  • 1970-01-01
  • 2017-12-28
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多