用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

微客吧 首页 教程 微信小程序 新手教程 查看内容

微信小程序循环赋值坑

纸飞机 2018-3-6 12:34

作者:月下独奏,来自原文地址就在这里。。没错就是这里,传回来的值是以jsonarray格式传过来的。 我需要将jsonarray进行解析获取经纬度,ID等车辆信息,然后赋值给地图上的mark,一般我的思路时直接用个for循环给每 ...

作者:月下独奏,来自

原文地址

就在这里。。没错就是这里,传回来的值是以jsonarray格式传过来的。
我需要将jsonarray进行解析获取经纬度,ID等车辆信息,然后赋值给地图上的mark,一般我的思路时直接用个for循环给每个mark进行赋值然后再Setdata一下就ok,
结果没想到小程序setData()设置数组对象的某个元素的属性时根本没用。。。。。
然后百度一会儿找到了方法
/////////////////////////////////////////////////
最近在使用微信小程序的setData时,遇到了以下问题。如下:

官网文档在使用setData()设置数组对象的某个元素的属性时,是这么使用的:

  1. Page({
  2. data: {
  3. array: [{text: 'init data'}],
  4. },
  5. changeItemInArray: function() {
  6. this.setData({
  7. 'array[0].text':'changed data'
  8. })
  9. }
  10. })

使用了 ‘array[0].text’ : ‘changed data’ 这样的值。但在实际使用中,我们对数组的中的某个元素的设置是动态的。即 我们通常应该是‘array[‘+index+’].text’ : ‘changed data’ ,其中index应该是一个动态的数字。但显然,这样是无法使用在对象的key中的。

所以,我只能使用了一个变通的方法。如下:

  1. var param = {};
  2. var string = "array["+index+"].text;
  3. param[string] = 'changed data';
  4. that.setData(param);

/////////////////////////////////////////////////////////////////////////////
这个每个属性都需要来一次。。。
不知道是我没找到更好的方法还是怎样,我的强迫症都出来了。。
下面就是我的代码。。。

  1. markers: {
  2. iconPath: "/picture/bike.png",
  3. id: 0,
  4. latitude: 23.099994,
  5. longitude: 113.324520,
  6. width: 50,
  7. height: 50
  8. }

这是markers类结构,我为了赋值写了这么多。。

  1. for(var i = 0; i < res.data.length; i++){
  2. // that.data.markers[i].id=i;
  3. // mark.id=i;
  4. var param = {};
  5. var string = "markers["+i+"].id";
  6. param[string] = res.data[i].Bike_id;
  7. that.setData(param);
  8. var string="markers["+i+"].iconPath";
  9. param[string] ="/picture/bike.png";
  10. that.setData(param);
  11. var string = "markers["+i+"].latitude";
  12. param[string] = res.data[i].BIKE_latitude;
  13. that.setData(param);
  14. var string = "markers["+i+"].longitude";
  15. param[string] = res.data[i].BIKE_longitude;
  16. that.setData(param);
  17. var string = "markers["+i+"].width";
  18. param[string] = 50;
  19. that.setData(param);
  20. var string = "markers["+i+"].height";
  21. param[string] = 50;
  22. that.setData(param);
  23. /* that.setData({
  24. markers:[{
  25. iconPath: "/picture/bike.png",
  26. id: 0,
  27. latitude: 23.099994,
  28. longitude: 113.324520,
  29. width: 50,
  30. height: 50
  31. }]
  32. })*/
  33. }
  34. // console.log(res.data[1])
  35. var markk=that.data.markers;
  36. that.setData({markers:markk})

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

鲜花
鲜花
握手
握手
雷人
雷人
路过
路过
鸡蛋
鸡蛋
分享至 : QQ空间
收藏