收藏
回答

多列选择器使用storage更新multiArray数据一闪之后恢复

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug 多列选择器 微信iOS客户端 Android 6.6.7 2.2.2

问题如题




对比两张 图片可见 在brandCode 变更之后 从缓存中读取 seriesList 展示列并没有 更新(具体情况是 闪现之后 恢复 上一次加载的数据),通过访问服务器加载数据则没有问题


相关代码

onLoad: function (options) {
   var that = this;
   var brandList = wx.getStorageSync('brands') || [];
   if(brandList.length > 0){
     // brandList.unshift({ "label": "全部", "value": "" });
     that.setData({
       // multiArray: [brandList, [{ "label": "全部", "value": "" }]],
       multiArray: [brandList, []],
       brandList: brandList,
     })
     var defaultBrandCode = brandList[0].value;    //获取默认 id
     if (defaultBrandCode) {
       that.getSeriesList(defaultBrandCode)      // 如果存在调用获取对应的车系数据
     }
   } else {
     wx.request({
       url: 'http://xxx/list',
       data: {},
       header: {
         'content-type': 'application/json' // 默认值
       },
       success: function (res) {
         var brandList = res.data;
         // brandList.unshift({ "label": "全部", "value": "" });
         that.setData({
           // multiArray: [brandList, [{ "label": "全部", "value": "" }]],
           multiArray: [brandList, []],
           brandList: brandList,
         })
         var defaultBrandCode = brandList[0].value;    //获取默认 id
         if (defaultBrandCode) {
           that.getSeriesList(defaultBrandCode)      // 如果存在调用获取对应的车系数据
         }
       }
     })
   }
 }
getSeriesList: function (brandCode) {
   if (!brandCode) return false;
   var that = this;
   this.setData({
     brandCode: brandCode
   })
   var seriesList = wx.getStorageSync('series_' + brandCode) || [];
   if (seriesList.length > 0){
     this.data.multiArray = [that.data.brandList, seriesList];
     this.data.seriesList = seriesList;
     that.setData({
       multiArray: [that.data.brandList, seriesList],
       seriesList: seriesList
     })
     console.log("seriesList:" + JSON.stringify(seriesList));
   } else {
     wx.request({
       url: 'http://xxx/list',
       data: { brandCode: brandCode },
       header: {
         'content-type': 'application/json' // 默认值
       },
       success: function (res) {
         var seriesList = res.data;
         // seriesList.unshift({ "label": "全部", "value": "" });
         that.setData({
           multiArray: [that.data.brandList, seriesList],
           seriesList: seriesList
         })
       }
     })
   }
 },


微信上展示为多次数据累加


代码片段 wechatide://minicode/7t2tJzma7Z1E

最后一次编辑于  2018-08-10
回答关注问题邀请回答
收藏

2 个回答

  • Albert Einstein
    Albert Einstein
    2018-08-15

    您在 “bindMultiPickerColumnChange” 方法的初期保存了 multiArray 对象 multiArray1,进入了一个 switch 语句,并调用 getSeriesList 方法,重新获取数据或者从 storage 获取了新的数据 multiArray2,并使用 setData 设置刷新了数据。但走出 switch 分支后,又在 bindMultiPickerColumnChange 但最后一行,调用 setData 将 multiArray1 复原了。

    2018-08-15
    有用 1
    回复 1
    • Abel
      Abel
      2018-08-15

      非常感谢!

      2018-08-15
      回复
  • 社区技术运营专员-灵芝
    社区技术运营专员-灵芝
    2018-08-13

    你好,你提供的代码片段会报错不能复现问题喔

    2018-08-13
    有用
    回复 7
    查看更多(2)
登录 后发表内容