【发布时间】:2019-10-16 13:24:44
【问题描述】:
我正在开发一个使用 Django、一些 JavaScript 和 Tachyons 的项目。我在模板文件中有以下内容:
<tbody class="lh-copy">
{% for alarm in alarm_list %}
<tr>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.agent.name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.profile_name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.is_active }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.created }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.message }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.alrmtype }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.acknowledged }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.is_hidden }}</td>
{% if alarm.is_active %}
<script language="javascript">
const alarmValElementList{{ alarm.id }} = document.getElementsByClassName("{{ alarm.id }}-td");
for (let i=0; i < alarmValElementList{{ alarm.id }}.length; i ++) {
alarmValElementList{{ alarm.id }}[i].classList.remove("bg-light-green");
alarmValElementList{{ alarm.id }}[i].classList.add("bg-light-red");
};
</script>
{% endif %}
</tr>
{% endfor %}
</tbody>
我正在从alarm_list 访问元素警报,并使用模板“if”插入JavaScript 代码,告诉HTML 元素删除当前背景颜色并添加另一种。我不乐意使用 alarmValeElementList{{ alarm.id }} 作为动态变量名,但我想不出其他方法。
有没有更好的方法来实现这个?
预计到达时间:
我认为这看起来更好,因为它摆脱了动态变量名称:
<script language="javascript">
let alarmValElementList = [];
</script>
{% for alarm in alarm_list %}
<tr>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.agent.name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.profile_name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.is_active }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.created }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.message }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.alrmtype }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.acknowledged }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.is_hidden }}</td>
{% if alarm.is_active %}
<script language="javascript">
alarmValElementList = document.getElementsByClassName("alarm-val-td");
for (let i=0; i < alarmValElementList.length; i ++) {
alarmValElementList[i].classList.remove("bg-light-green");
alarmValElementList[i].classList.add("bg-light-red");
};
</script>
{% endif %}
</tr>
{% endfor %}
但是,我想知道是否有更好的方法可以做到这一点?
【问题讨论】:
-
为什么不用
alarmValElementList而不是alarmValElementList{{...}} -
好问题。如果您注意到,我正在定义一个元素列表,这些元素将在每次警报列表迭代中重新定义。如果我只坚持alarmValElementList,我会得到像alarmValElementList已经定义的错误。不过,我认为,您的问题至少通过在alarm_list for-loop 之外定义alarmValElementList 对我有所帮助。谢谢!
标签: javascript python django tachyons-css