作者:月下独奏,来自原文地址
就在这里。。没错就是这里,传回来的值是以jsonarray格式传过来的。
我需要将jsonarray进行解析获取经纬度,ID等车辆信息,然后赋值给小程序地图上的mark,一般我的思路时直接用个for循环给每个mark进行赋值然后再Setdata一下就ok,
结果没想到小程序setData()设置数组对象的某个元素的属性时根本没用。。。。。
然后百度一会儿找到了方法
/////////////////////////////////////////////////
最近在使用微信小程序的setData时,遇到了以下问题。如下:
官网文档在使用setData()设置数组对象的某个元素的属性时,是这么使用的:
- Page({
- data: {
- array: [{text: 'init data'}],
- },
- changeItemInArray: function() {
- this.setData({
- 'array[0].text':'changed data'
- })
- }
- })
使用了 ‘array[0].text’ : ‘changed data’ 这样的值。但在实际使用中,我们对数组的中的某个元素的设置是动态的。即 我们通常应该是‘array[‘+index+’].text’ : ‘changed data’ ,其中index应该是一个动态的数字。但显然,这样是无法使用在对象的key中的。
所以,我只能使用了一个变通的方法。如下:
- var param = {};
- var string = "array["+index+"].text;
- param[string] = 'changed data';
- that.setData(param);
///////////////////////////////////////////////////////////////////////////// 这个每个属性都需要来一次。。。 不知道是我没找到更好的方法还是怎样,我的强迫症都出来了。。 下面就是我的代码。。。
- markers: {
- iconPath: "/picture/bike.png",
- id: 0,
- latitude: 23.099994,
- longitude: 113.324520,
- width: 50,
- height: 50
- }
这是markers类结构,我为了赋值写了这么多。。
- for(var i = 0; i < res.data.length; i++){
- // that.data.markers[i].id=i;
- // mark.id=i;
- var param = {};
- var string = "markers["+i+"].id";
- param[string] = res.data[i].Bike_id;
- that.setData(param);
- var string="markers["+i+"].iconPath";
- param[string] ="/picture/bike.png";
- that.setData(param);
- var string = "markers["+i+"].latitude";
- param[string] = res.data[i].BIKE_latitude;
- that.setData(param);
- var string = "markers["+i+"].longitude";
- param[string] = res.data[i].BIKE_longitude;
- that.setData(param);
- var string = "markers["+i+"].width";
- param[string] = 50;
- that.setData(param);
- var string = "markers["+i+"].height";
- param[string] = 50;
- that.setData(param);
- /* that.setData({
- markers:[{
- iconPath: "/picture/bike.png",
- id: 0,
- latitude: 23.099994,
- longitude: 113.324520,
- width: 50,
- height: 50
- }]
- })*/
- }
- // console.log(res.data[1])
- var markk=that.data.markers;
- that.setData({markers:markk})