一套评论回复系统,通常用在社区中对文章、产品、服务、人员等进行评论/回答。
自动拉取最新评论
每隔一分钟拉取一次最新评论,总共20次
开始编写评论
调用插件容器的start()
函数来开始编写评论,比如$(".zp110").start()
通常我们会使用如下表达式来触发:
stopIf(!$c.me, 'go("login")')
$(".zp110").start()
timeout()
$(".zp110 .zp100").scrollIntoView()
$w.scrollBy(0, -100)
被评论对象_id
默认是当前页面的$id
每次新增评论时会在被评论对象的y.zp110
加1
以便被评论对象显示评论数,同理删除评论是会自动把评论数减1
删除被评论对象时也需要把它下面的所有评论删除,例如在后端服务$product.delete()
里配置如下:
ngIf(user._id != $x.auth && !user.role.includes("admin"))
exc($exp["del_" + $x.type] || "")
如果被评论对象的类型是post,那么再新建如下表达式del_post
$product.search("x", {type: "zp110", "x.zp110": _id}, {limit: 0, select: "_id"})
$r.arr.forEach('$product.delete($x._id)')
用户页表达式
用来链接评论者/回复者的头像和昵称到用户页,默认是 "/user/" + _id
,不需要使用小括号。
用户头像路径
指定从用户消息中的哪个路径(字段)作为用户头像
用户名称路径
指定从用户消息中的哪个路径(字段)作为用户名称
管理员role
作者是可以修改/删除本人发表的评论/回复的,我们也可以设置一种角色可以修改/删除所有的评论/回复,此角色默认是admin
使用自定义后端服务
新建/删除评论时还需要增加/减少被评论对象的评论数,如果把这些操作包装成一个后端服务将不需要进行多次网络调用而使操作更加可靠(原子性)。
我们新建一个$srv.zp110_new
后端服务:
ngIf(!user || !option.zp110)
$product.create("zp110", option)
$product.modify(option.zp110, {"$inc": {"y.zp110": 1 } })
$r
再新建一个$srv.zp110_del
后端服务:
ngIf(!option._id || !option.zp110, "warn", "缺少参数")
$product.get(option._id)
ngIf($r.auth != user._id && !user.role.includes("admin"), "alert", "无权限")
$product.delete(option._id)
$product.modify(option.zp110, {"$inc": {"y.zp110": -1 } })
$r
然后打开此开关就可以使用自定义后端服务了