收藏
回答

[BUG]自定义组件Component当页面事件执行时this对象不完整或不一致

问题模块
API和组件

如果页面json中声明usingComponents,当运行期,事件执行时,this关键词对象类型不一致,本来应该是page对象本身,但是其实不是😢,最大的区别是用组件时少了route字段,只有私有的那个__route__。这个bug可以很容易重现:

/**

  * 生命周期函数--监听页面加载

  */

onLoad: function (options) {

    console.log(this);

}


对应的页面json里,声明usingComponents和不声明usingComponents,两次打印的不一样(大体看上去一样,其实不一样😄)。



求一致啊!!!!!!!!!!!!!!!

最后一次编辑于  2017-11-09  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

8 个回答

  • LastLeaf
    LastLeaf
    2017-11-09

    感谢反馈。这是个我们正在准备上线修正的bug。

    2017-11-09
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-11-09

    你好,这个bug怀疑与animation有关。能否提供一下相关代码?

    2017-11-09
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-11-09

    你好,如果是route字段缺失的问题,是因为route字段被暂时移除了,我们会补回来。请问你使用route字段的目的是什么呢?

    2017-11-09
    赞同
    回复
  • 菜果雨
    菜果雨
    01-17

    请问this不一致的问题解决了吗?

    01-17
    赞同
    回复
  • 红色星星
    红色星星
    2017-11-09

    @LastLeaf


    果真!!!!!!!!


    <view animation="{{__animationData}}"></view>


    如果__animationData初始值为null的时候,就会报上图那个错误。感觉这个也算Bug吧,不使用组件的时候就没事。


    谢谢啦,这次遇到的两个问题都解决,哈哈,感谢!!!!!!!!!

    2017-11-09
    赞同
    回复
  • 红色星星
    红色星星
    2017-11-09

    好的,知道这个就好办了,我们先检查一下 O(∩_∩)O 谢谢

    2017-11-09
    赞同
    回复
  • 红色星星
    红色星星
    2017-11-09

    另外,虽然现在容错了一下,临时解决了部分字段没有的问题,但是还是会遇到下面这个错误,这个实在不知道应该从哪入手,这个阶段是WXML的问题导致的?



    2017-11-09
    赞同
    回复
  • 红色星星
    红色星星
    2017-11-09

    有时候一些页面公用的部件是需要监听Page的事件的, 比如我们做一个底部浮动工具条,如果产品体验做的细致一些的话,就需要监听Page的滚动事件, 在页面向上滚动的时候隐藏,向下滚动的时候显示(就好像Safari浏览器的工具条)。目前我们能想到的都是土办法,一种是最容易想到的在页面的Page.onPageScroll处理,但是这种方法组件和Page有耦合,每个使用这个工具条的Page都需要写一次。那另一个方法就是在组件内部完成,这就需要重写Page的各个系统事件,实现调用监听和处理分发。我们是把每个组件要监听的Page事件都存到了一个对象上,通过route来记录的

    2017-11-09
    赞同
    回复