我试图在文章中使用腾讯视频,我的文章数据类似于这样
[ { "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赋值后不能通知显示层去更新呢?
感觉是 setData 报错中断了。
看起来 article 并非一个普通的 js 对象?
开发者工具上,基础库 >= 2.0.9 时有没有什么报错信息呢?
没有任何报错信息的
我的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"
}
]
上面的错了,那个是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
});
2.0.9 版本有一些 setData 的 data 提取策略变更,如果 setData 一些特殊的 object ,可能会有潜在的 bug 影响,特别是有 function 字段或者 toJSON 字段的情况。麻烦看一下是不是遇到了这种情况。
经测试,此问题在开发者工具上也存在,但是和调试基础库的版本有关,在基础库版本在2.0.9及以上时,存在这个问题,但是2.0.8及以下时不存在这个问题。