如果页面json中声明usingComponents,当运行期,事件执行时,this关键词对象类型不一致,本来应该是page对象本身,但是其实不是😢,最大的区别是用组件时少了route字段,只有私有的那个__route__。这个bug可以很容易重现:
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
console.log(this);
}
对应的页面json里,声明usingComponents和不声明usingComponents,两次打印的不一样(大体看上去一样,其实不一样😄)。
求一致啊!!!!!!!!!!!!!!!
感谢反馈。这是个我们正在准备上线修正的bug。
你好,这个bug怀疑与animation有关。能否提供一下相关代码?
你好,如果是route字段缺失的问题,是因为route字段被暂时移除了,我们会补回来。请问你使用route字段的目的是什么呢?
请问this不一致的问题解决了吗?
@LastLeaf
果真!!!!!!!!
<
view
animation
=
"{{__animationData}}"
></
view
>
如果__animationData初始值为null的时候,就会报上图那个错误。感觉这个也算Bug吧,不使用组件的时候就没事。
谢谢啦,这次遇到的两个问题都解决,哈哈,感谢!!!!!!!!!
好的,知道这个就好办了,我们先检查一下 O(∩_∩)O 谢谢
另外,虽然现在容错了一下,临时解决了部分字段没有的问题,但是还是会遇到下面这个错误,这个实在不知道应该从哪入手,这个阶段是WXML的问题导致的?
有时候一些页面公用的部件是需要监听Page的事件的, 比如我们做一个底部浮动工具条,如果产品体验做的细致一些的话,就需要监听Page的滚动事件, 在页面向上滚动的时候隐藏,向下滚动的时候显示(就好像Safari浏览器的工具条)。目前我们能想到的都是土办法,一种是最容易想到的在页面的Page.onPageScroll处理,但是这种方法组件和Page有耦合,每个使用这个工具条的Page都需要写一次。那另一个方法就是在组件内部完成,这就需要重写Page的各个系统事件,实现调用监听和处理分发。我们是把每个组件要监听的Page事件都存到了一个对象上,通过route来记录的