目前是遇到了一个比较棘手的需求,我的页面是组件递归渲染的,有一些数据是通过mqtt送回的,送回后我要把这些数据渲染到递归的每一层中去。
我是这么做的,每一层递归在他的attached中都向一个ghapp中注册一个数组元素,像这样
//groupPanel.js
attached() {
ghApp.groupPanelCache(this)
}
//ghApp.js
groupPanelCache(data) {
groupPanelList.push(data)
}
这样我认为我已经把递归的组件的this对象缓存到ghApp.js中了,然后在数据送回后,我在ghApp中对比送回数据是属于哪一层的,然后去调用对应的this对象的seData(),
function onMessage(data) {
for (let item of groupPanelList) {
if (jsonpath.value(item.data.currGroup, "$.groups[?(@.parentDeviceId ==" + data.deviceId + ")]")) {
ghMessageProcessor.updateChannelStatus({
deviceId: data.deviceId,
currStatus: item.data.currGroup,
newStatus: data.msgFromRemote.data.ndPeriChannelList
})
//上面的步骤已经把数据处理好了,现在只需要调用对应的setData就好了
let currGroup = item.data.currGroup
item.setData({
currGroup
}, () => {
console.log(item.data.currGroup)
//打印正常,实际上如果调用item的任何方法也都是正常的,
//比如我调用item(递归组件的this)的一个方法打印它的data,结果也是正确的
})
}
}
}
我想问一下,这样传过去的this是不是不能这么调啊,还是说有什么别的问题,或者大家有什么好的解决办法,能让我调到每一级的setData,或者有什么别的办法,不用wx:if的前提下可以渲染所有递归层级.
两种可能:
// 这两行跑了等于没跑吧 let currGroup = item.data.currGroup item.setData({ currGroup })
请问一下如果是第一种情况该怎么解决一下?
你去了解一下this的作用域