收藏
回答

使用腾讯视频插件时setData失效

我试图在文章中使用腾讯视频,我的文章数据类似于这样

[
    {
        "type": "p",
        "data": "为了避免用户输错申请码、方便用户填写申请码,我们增加了扫一扫自动填写申请码功能。"
    },
    {
        "type": "img",
        "data": "http://lc-501iy7mk.cn-e1.lcfile.com/aa51ee58b4f7e0350bae.jpg"
    },
    {
        "type": "p",
        "data": "为了使用这个功能,请将CDC更新至0.25.19或更新版本"
    },
    {
        "type": "vedio",
        "data": "e0354z3cqjp"
    }
]

然后在前段根据type渲染出来。最近我试图加入腾讯视频,就是其中type为vedio的数据。wxml中是这样写的

<view wx:elif='{{item.type == "vedio"}}'>
   <txv-video vid="{{item.data}}" playerid="txv1" autoplay="{{true}}"></txv-video>
</view>

在模拟器上一切正常,腾讯视频可以正常播放,但是在真机上却出现了问题,文字貌似卡在了setData这个上面,我获取数据的js代码是这样的

onLoad: function (e) {
    var that = this;
    new AV.Query('Article').get(e.id).then(function (article) {
        article.increment('read', 1).save().then(function (article) {
            var images = [];
            article.get('content').forEach(function (item) {
                if (item.type == 'img') {
                    images.push(item.data);
                }
            })
            console.log('接下去要更新数据');
            console.log(article);
            console.log(images);
            that.setData({
                article: article,
                images: images,
                loaded: true
            });
            console.log("更新数据完成");
        })
    })
},

通过远程调试,我发现,接下去要更新数据、article、images等信息都正确打印出来了,但是更新数据完成却始终不能打印出来,因此我怀疑setData出现了问题,另一个印证是,我的界面在loaded为true前是一直显示加载动画的,于是我的界面在真机上一直显示加载动画。

但是我看了appData,里面article、images、loaded均已经被正确赋值。那么,是不是在json文件中定义了腾讯视频插件的情况下,setData赋值后不能通知显示层去更新呢?


回答关注问题邀请回答
收藏

2 个回答

  • LastLeaf
    LastLeaf
    2018-07-26

    感觉是 setData 报错中断了。

    看起来 article 并非一个普通的 js 对象?

    开发者工具上,基础库 >= 2.0.9 时有没有什么报错信息呢?

    2018-07-26
    有用
    回复 3
    • 2018-07-28

      没有任何报错信息的

      我的article就是类似于这样的一个array对象而已,其余都不变的情况下,基础库小于2.0.9的时候是正常的

      [
          {
              "type": "p",
              "data": "为了避免用户输错申请码、方便用户填写申请码,我们增加了扫一扫自动填写申请码功能。"
          },
          {
              "type": "img",
              "data": "http://lc-501iy7mk.cn-e1.lcfile.com/aa51ee58b4f7e0350bae.jpg"
          },
          {
              "type": "p",
              "data": "为了使用这个功能,请将CDC更新至0.25.19或更新版本"
          },
          {
              "type": "vedio",
              "data": "e0354z3cqjp"
          }
      ]


      2018-07-28
      回复
    • 2018-07-28

      上面的错了,那个是article里的content的内容而已。一个article应该是类似于这样的一个object。



      然后受你的提醒,我把setData改变了一下,不是直接赋值一个article,而是把里面的内容提取出来,然后就好了。但是直接赋值一个article 的话是不行的,也不报错。

      that.setData({
          content: article.get('content'),
          title: article.get('title'),
          read: article.get('read'),
          createdAt: article.get('createdAt'),
          images: images,
          loaded: true
      });


      2018-07-28
      回复
    • LastLeaf
      LastLeaf
      2018-07-30

      2.0.9 版本有一些 setData 的 data 提取策略变更,如果 setData 一些特殊的 object ,可能会有潜在的 bug 影响,特别是有 function 字段或者 toJSON 字段的情况。麻烦看一下是不是遇到了这种情况。

      2018-07-30
      回复
  • 2018-07-26

    经测试,此问题在开发者工具上也存在,但是和调试基础库的版本有关,在基础库版本在2.0.9及以上时,存在这个问题,但是2.0.8及以下时不存在这个问题。

    2018-07-26
    有用
    回复
登录 后发表内容