微信小程序循环赋值坑(转)

时间:2024-04-14 09:49:56

 

原文:https://blog.****.net/d7185540/article/details/71438328 

最近在弄微信小程序,类似于共享单车用来练练手,基本原理就是小程序发送经纬度给服务器,服务器从数据库中检索经纬度附近的单车传给小程序。

就在这里。。没错就是这里,传回来的值是以jsonarray格式传过来的。

我需要将jsonarray进行解析获取经纬度,ID等车辆信息,然后赋值给小程序地图上的mark,一般我的思路时直接用个for循环给每个mark进行赋值然后再Setdata一下就ok,

结果没想到小程序setData()设置数组对象的某个元素的属性时根本没用。。。。。

然后百度一会儿找到了方法   http://blog.****.net/hicoldcat/article/details/53967334

/////////////////////////////////////////////////

最近在使用微信小程序的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})

最后还必须setData一下,不然地图不会刷新。。

如果QT瞬间弄好,真的麻烦。。。。。。。。。。。。。

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

(我我的提醒:res.data.data.length    我是通过wx.request  微信自带的请求反回的值   )

微信小程序循环赋值坑(转)