之前有講過(guò)一個(gè)投票模型房铭,用戶登錄案例可以給候選人投票或者成為候選人庞溜,而且每人只有一次投票機(jī)會(huì)桥帆,今天我們對(duì)其進(jìn)行一些拓展喳整。(使用ivx實(shí)現(xiàn)投票的經(jīng)驗(yàn)總結(jié))
一.實(shí)時(shí)展示
原案例中我們是在案例初始化時(shí)將所有候選人信息拿到前臺(tái)管搪,并且只有在當(dāng)前用戶投票后才去將前臺(tái)數(shù)據(jù)中所投候選人的票數(shù)加1虾攻,這樣是無(wú)法得知登錄案例后其他用戶的投票操作的,不過(guò)我們可以通過(guò)添加一個(gè)連接組件來(lái)實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)展示更鲁。下面說(shuō)一下具體步驟霎箍。
1.登記
在案例初始化時(shí)有一個(gè)發(fā)起微信公眾號(hào)登錄的步驟,我們可以在登錄成功后讓連接登記當(dāng)前用戶澡为,這樣所有在線用戶就都會(huì)處于連接中漂坏。
2.成為候選人
當(dāng)用戶選擇成為候選人的時(shí)候,我們需要發(fā)送一條全局消息給連接中的所有用戶進(jìn)行通知媒至,其中設(shè)定消息類型為參加投票顶别,其他消息內(nèi)容包括參選人的昵稱、頭像和openID拒啰。當(dāng)其他用戶收到全局消息時(shí)驯绎,就將參選人信息添加到前臺(tái)的候選人數(shù)據(jù)列表中。
3.投票時(shí)發(fā)送全局消息
當(dāng)用戶點(diǎn)擊投票按鈕谋旦,原本是當(dāng)后臺(tái)數(shù)據(jù)修改成功后再修改前臺(tái)數(shù)據(jù)剩失,現(xiàn)在我們改為調(diào)用連接發(fā)送一條全局消息,其中消息類型為投票册着,候選人則就是所投候選人的openID拴孤。
對(duì)應(yīng)的,其它用戶收到全局消息時(shí)甲捏,會(huì)將前臺(tái)候選人數(shù)據(jù)列表中的數(shù)據(jù)更新演熟。這樣當(dāng)其他用戶投票時(shí),所有在線用戶就都能實(shí)時(shí)收到并更新票數(shù)了司顿。
二.一次多票
還有一個(gè)可拓展地方是绽媒,原來(lái)的案例中每次用戶投票只能投給一個(gè)候選人蚕冬,如何實(shí)現(xiàn)一次選中多個(gè)候選人進(jìn)行投票呢,這里我們將點(diǎn)擊投票按鈕后提交的數(shù)據(jù)換成一個(gè)對(duì)象數(shù)組是辕。每次點(diǎn)擊一個(gè)候選人時(shí),會(huì)使用indexOf方法判定當(dāng)前選中候選人是否已經(jīng)在“選中對(duì)象”中了猎提,如果在則移出获三,不在則添加。最后將“選中對(duì)象”傳遞給服務(wù)锨苏。
在服務(wù)中我們執(zhí)行一個(gè)循環(huán)語(yǔ)句疙教,循環(huán)次數(shù)就是openID的元素個(gè)數(shù),每次循環(huán)中對(duì)數(shù)組中的一個(gè)候選人進(jìn)行投票伞租。這樣贞谓,循環(huán)結(jié)束后就對(duì)提交的所有候選人都進(jìn)行了投票。
其實(shí)最新的ivx中數(shù)據(jù)庫(kù)可以執(zhí)行一次提交多條數(shù)據(jù)的動(dòng)作了葵诈,并且不再限制必須提交JSON格式的數(shù)據(jù)裸弦,可以直接提交對(duì)象數(shù)組。
三.投票組件
最后我們說(shuō)一下功能數(shù)據(jù)庫(kù)——投票組件是如何使用的作喘。
1.投票組件
投票組件需要添加在后臺(tái)理疙,可以看到投票組件下有兩個(gè)數(shù)據(jù)庫(kù),候選人信息和投票流水記錄泞坦,它們自動(dòng)包含一些必須字段窖贤。我們只能修改候選人和自己添加的頭像字段里的內(nèi)容,而投票數(shù)則是無(wú)法在數(shù)據(jù)庫(kù)中輸入修改的贰锁,它們的修改只能由投票組件的投票動(dòng)作發(fā)起赃梧。
2.投票組件的動(dòng)作
投票組件可以執(zhí)行兩個(gè)動(dòng)作,獲取候選人列表和投票豌熄。獲取候選人列表就是將所有候選人輸出授嘀,與普通的數(shù)據(jù)庫(kù)輸出是類似的,投票是已經(jīng)封裝好的動(dòng)作房轿,會(huì)先在投票流水記錄中添加一條數(shù)據(jù)然后更新候選人信息粤攒。這里我們將其放置在兩個(gè)服務(wù)中。
3.最后就可以在前臺(tái)通過(guò)服務(wù)調(diào)用投票組件了囱持。
不過(guò)需要注意的是夯接,使用投票組件時(shí),就只能通過(guò)服務(wù)對(duì)候選人列表和投票流水記錄兩個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作纷妆,在前臺(tái)的事件中是無(wú)法選中它們的盔几。比如添加一個(gè)候選人,我們只能將候選人傳遞給服務(wù)掩幢,由服務(wù)執(zhí)行提交動(dòng)作逊拍,而且也只能提交候選人以及自己添加的字段上鞠。