我已經(jīng)使用 Riot.js 構(gòu)建了一個(gè) SPA,該 SPA 將專(zhuān)有消息傳遞系統(tǒng)接收到的數(shù)據(jù)可視化。為了使標(biāo)簽對(duì)更改做出反應(yīng),我riot.ob在riot上下文中創(chuàng)建了一個(gè)全局 observable ( ),當(dāng)從服務(wù)器接收到新值時(shí),它會(huì)觸發(fā)一條消息:riot.ob.trigger('valueUpdate', stationId, datapointId, value);如果消息是針對(duì)此標(biāo)簽的,則有許多不同的標(biāo)簽訂閱此事件并觸發(fā)更新:riot.ob.on('valueUpdate', function (stationId, datapointId, value) { if (stationId == self.stationId && datapointId == self.datapoint.id) { self.value = value; self.update(); }});這很好用。當(dāng)我在我的應(yīng)用程序中導(dǎo)航時(shí)會(huì)出現(xiàn)問(wèn)題,這意味著我需要在特定區(qū)域卸載標(biāo)簽并安裝其他東西。當(dāng)我卸載像上面這樣的標(biāo)簽時(shí),我需要取消訂閱valueUpdate事件,所以我使用這個(gè):this.on('unmount', function () { riot.ob.off('valueUpdate');})但是現(xiàn)在所有其他仍然安裝在其他地方的標(biāo)簽也會(huì)自動(dòng)取消訂閱,并且不再監(jiān)聽(tīng)這個(gè)valueUpdate事件。如何僅取消訂閱單個(gè)標(biāo)簽的事件處理函數(shù)?我是否必須創(chuàng)建一個(gè)命名函數(shù)并將其傳遞給riot.ob.off('valueUpdate');某種方式?
在一個(gè)標(biāo)簽中取消訂閱 observable 會(huì)禁用所有嗎?
慕森王
2021-10-29 16:45:21