floorsMap:{
1:{
markers:[{},{},{},],
polyline:[{},{},{}],
polygons:[{},{},{},]
},
2:{
markers:[{},{},{},],
polyline:[{},{},{}],
polygons:[{},{},{},]
},
3:{
markers:[{},{},{},],
polyline:[{},{},{}],
polygons:[{},{},{},]
},
}
目前使用地图组件,需要有个json来存储对应楼层的marker、polyline、polygons数据,在使用setdata时,楼层号对应的1/2/3,需要动态生成、对应的polyline、marker、polygons也需要动态生成,这样setdata该如何写?我现在是参考网上其他人的写法,先写个json对象把数据保存起来,再setdata,但是这样每次,floormap都会指向一个新的对象,那我需要把之前处理的polyline数据重新setdata进对象,而且容易出问题。
let floorMapGlo={}; //这个为全局变量
let key = '' + floorId + '';
floorMapGlo[key] = { polygons: polygonsGlo }; //polygonsGlo 为已经处理好的数据
this.setData({
floorsMap: floorMapGlo,
});
上面这样设置了,对应楼层的polygons,但是再处理完marker数据时,设置marker数据时,就需要这样写
let key = '' + floorId + '';
floorMapGlo[key] = { polygons: this.data.floorMap[floorId].polygons, markers:markersGlo }; //这里因为等于了一个新的对象,所以需要把之前的polygons重新拿过来
this.setData({
floorsMap: floorMapGlo,
});
请问有什么简单的办法,可以直接setdata这样的数据吗?
floorsMap[floorId][markers]=.......
floorId、markers都是变量
let floorId = 1;
let markerName = "markers";
let changeObj = `floorsMap.${floorId}.${markerName}` ;
let changeContext = [{a:3},{a:2},{a:1}];
this.setData({
[`${changeObj}`]:changeContext
})
this.requestPolygons(defaultFloor[0]).then(() => {
console.log(f1Plgy);
let polygonsName = 'polygons';
let polineName = 'polyline';
let floorsMapObj = `floosMap.${defaultFloorId}.${polygonsName}`;
let floorsMapObj1 = `floosMap.${defaultFloorId}.${polineName}`;
this.parsePolygons(f1Plgy);
this.setData({
polygons: polygonsGlo,
[`${floorsMapObj}`]: polygonsGlo
}, function () {
this.requestPolyline(defaultFloor[0]).then(() => {
console.log(f1Line);
this.parsePolyline(f1Line);
this.setData({
polyline: polylineGlo,
[`${floorsMapObj1}`]: polylineGlo
});
});
})
});
},
可以看一下es6的Computed property names。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
是不是主要想解决polygons重新拿过来的问题?在floorsMap对象上直接改不行嘛?就是直接let floorMapGlo=this.data.floorsMap
this.setData({ [`floorsMap.${floorId}.${markers}`]: 'dddd' })
setData 的 key值是可以读取对象层级的哦。
报错可能是本身 floorsMap 变量还没被赋值。
参考这个文档的最下面的 setData 写法即可(页面关键字 changeItemInArray)。
https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html