小程序模板网

微信小程序循环赋值坑

发布时间:2018-04-18 10:25 所属栏目:小程序开发教程

作者:月下独奏,来自原文地址

就在这里。。没错就是这里,传回来的值是以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.  
  9.  
  10. var string="markers["+i+"].iconPath";
  11. param[string] ="/picture/bike.png";
  12. that.setData(param);
  13.  
  14.  
  15. var string = "markers["+i+"].latitude";
  16. param[string] = res.data[i].BIKE_latitude;
  17. that.setData(param);
  18.  
  19.  
  20.  
  21. var string = "markers["+i+"].longitude";
  22. param[string] = res.data[i].BIKE_longitude;
  23. that.setData(param);
  24.  
  25.  
  26.  
  27.  
  28. var string = "markers["+i+"].width";
  29. param[string] = 50;
  30. that.setData(param);
  31.  
  32.  
  33. var string = "markers["+i+"].height";
  34. param[string] = 50;
  35. that.setData(param);
  36. /* that.setData({
  37. markers:[{
  38. iconPath: "/picture/bike.png",
  39. id: 0,
  40. latitude: 23.099994,
  41. longitude: 113.324520,
  42. width: 50,
  43. height: 50
  44. }]
  45. })*/
  46. }
  47. // console.log(res.data[1])
  48. var markk=that.data.markers;
  49. that.setData({markers:markk})


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23648.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询