之前有讲过一个投票模型,用户登录案例可以给候选人投票或者成为候选人,而且每人只有一次投票机会,今天我们对其进行一些拓展。(使用ivx实现投票的经验总结:juejin.cn/post/684490… )
一.实时展示
原案例中我们是在案例初始化时将所有候选人信息拿到前台,并且只有在当前用户投票后才去将前台数据中所投候选人的票数加1,这样是无法得知登录案例后其他用户的投票操作的,不过我们可以通过添加一个连接组件来实现数据的实时展示。下面说一下具体步骤。
1.登记
在案例初始化时有一个发起微信公众号登录的步骤,我们可以在登录成功后让连接登记当前用户,这样所有在线用户就都会处于连接中。
当用户选择成为候选人的时候,我们需要发送一条全局消息给连接中的所有用户进行通知,其中设定消息类型为参加投票,其他消息内容包括参选人的昵称、头像和openID。当其他用户收到全局消息时,就将参选人信息添加到前台的候选人数据列表中。
当用户点击投票按钮,原本是当后台数据修改成功后再修改前台数据,现在我们改为调用连接发送一条全局消息,其中消息类型为投票,候选人则就是所投候选人的openID。
还有一个可拓展地方是,原来的案例中每次用户投票只能投给一个候选人,如何实现一次选中多个候选人进行投票呢,这里我们将点击投票按钮后提交的数据换成一个对象数组。每次点击一个候选人时,会使用indexOf方法判定当前选中候选人是否已经在“选中对象”中了,如果在则移出,不在则添加。最后将“选中对象”传递给服务。
最后我们说一下功能数据库——投票组件是如何使用的。
1.投票组件
投票组件需要添加在后台,可以看到投票组件下有两个数据库,候选人信息和投票流水记录,它们自动包含一些必须字段。我们只能修改候选人和自己添加的头像字段里的内容,而投票数则是无法在数据库中输入修改的,它们的修改只能由投票组件的投票动作发起。
投票组件可以执行两个动作,获取候选人列表和投票。获取候选人列表就是将所有候选人输出,与普通的数据库输出是类似的,投票是已经封装好的动作,会先在投票流水记录中添加一条数据然后更新候选人信息。这里我们将其放置在两个服务中。