javascript - 为什么我在烧瓶模板中得到了正确的对象,而在点击功能中却得到了一堆数字?
问题描述
我正在使用烧瓶开发文章评论。但是,当我通过单击处理程序函数从烧瓶中测试 commentIp 对象时,我得到了一串数字而不是对象。
这是模板代码。(cips:一个cip对象数组;我在模板中得到了正确的对象)
{% for i in range(0,comments |length) %}
{% set comment=comments[i] %}
<p>{{ loop.index }}. Email:{{ comment.email }}</p>
<p>PostTime:{{ comment.postTime }}</p>
<p>Content:{{ comment.content }}</p>
{% set up_btn_id='up_btn'~ i|string %}
{% set down_btn_id='down_btn'~ i|string %}
{% if cips[i].vote_state ==0 %}
<button id='{{up_btn_id}}' onclick="upVote(this)">up:{{ comment.upvoteNum }}</button>
<button id="{{down_btn_id}}" onclick="downVote(this)">down:{{ comment.downvoteNum }}</button>
{% elif cips[i].vote_state ==1 %}
<button id='{{up_btn_id}}' onclick="upVote(this)" style="color: green">up:{{ comment.upvoteNum }}</button>
<button id="{{down_btn_id}}" onclick="downVote(this)">down:{{ comment.downvoteNum }}</button>
{% else %}
<button id='{{up_btn_id}}' onclick="upVote(this)">up:{{ comment.upvoteNum }}</button>
<button id="{{down_btn_id}}" onclick="downVote(this)" style="color: red">down:{{ comment.downvoteNum }}</button>
{% endif %}
{% if flag==1 %}
<form action="../cdelete/{{ comment.id }}" method="post">
Password:<input type="password" name="psw">
<input type="submit" value="delete">
</form>
{% endif %}
{% endfor %}
这是upVote功能
function upVote(up_btn) {
const cips = '{{cips}}';
for (let cip in cips)
console.log(cip);//a bunch of Numbers from 0 to 72
}
解决方案
当将值放入模板时,它会采用文字值。cips
javascript 无法理解的数组。想一想,它是您在 python 中定义的对象列表 - javascript 应该如何知道这些对象是什么?它适用于您的值,comment.upvoteNum
因为这是一个文字值。它不理解这些对象 - 您可能会看到对象内存地址。因此,为了将您的 {{cips}} 转换为 javascript 中的数组,您需要将这些对象转换为json
. Flask 有一些方便的功能 - 看看tojson
- 它的 HTML 安全以及 json 安全。看起来您正在尝试更新您传入的模型的状态(即投票)。您可能希望将其提交给烧瓶视图函数,因此请记住,对 HTML 中的 cip 对象所做的更改就是这样。除非将它们发送回您的服务器并进行处理,否则它们不会反映在 python 中的 cip 模型中。
推荐阅读
- sql - 在 Excel 表上使用 SUM 和 GROUP BY 进行 SQL 查询的自动化错误
- actions-on-google - 对话流 JSON 中的 LanguageCode 不适用于 Google 上的操作
- jquery - 通过 jquery 调用服务器方法不起作用
- javascript - SVG:xlink:href 加载的图像在 safari 中不起作用
- javascript - 从相机拍摄的图像未保存到图库
- c++ - ffmpeg h264_amf 在 C++ 中的用法
- sql-server - 用于监视次要条件的 T-SQL 触发器
- javascript - 如何在AngularJS ng-repeat中使用带空格的变量?
- sql - 检查字符串是否包含列值
- react-native - 如何将图标添加到 react-native-tab-view 中的选项卡