收藏
回答

重开此帖。 严重bug, 用class定义的事件在运行的时候提示找不到

刚才举的例子不够清晰,那我再举一个吧

wxml

<view bindtap="tapTab"></view>

js

class Home {
  tapTab() {
    console.log("tab");
  }
  onPullDownRefresh() {
    console.log("refresh");
  }
  onReachBottom() {
    console.log("bottom");
  }
  onLoad() {
    console.log("onLoad");
  }
}
 
Page(new Home());


请官方人员先不要急着标记为已解决。

按照上一个帖子里哥们说的意思事件不能定义到原型里(https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=512271115&docid=a5d216e91ba2550a23ad87b3044ef841)

,好  那为什么onLoad会执行呢,请给我一个解释


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

6 个回答

  • 洋葱头
    洋葱头
    2017-03-31

    这个 回答 是正确的


    但是为什么onload 或者 onshow 能执行呢?


    因为 onload onshow 是小程序框架 “明白” 的方法,那么在相应的生命周期中就会去调用这个方法,而别的又不能枚举到,框架又不知道,自然是找不到的了


    2017-03-31
    有用
    回复
  • 7.
    7.
    2017-03-31

    一个迂回的解决方案 可以解决这个问题

    2017-03-31
    有用
    回复
  • 韬々
    韬々
    2017-03-31

    从官方的角度来说,也很欢迎开发者热情反映问题,这样大家都能从中汲取到知识,学习成长。


    这里的话是这样的:


    当实例化Page的时候,传入一个对象作为参数。

    1. 先检查该对象的key有没有预先定义的保留字

    2. 用一个预先存在的方法名列表(eg:onLoad,onShow等等)检查其中有无关于页面lifeCycle的方法

    3. 使用for in迭代取对象中的自定义方法


    回到你的问题:

    1. class定义的原型方法的propertyIsEnumerable为false,无法使用任何迭代接口遍历到

    2. 至于onLoad这种有关页面lifeCycle的方法,是直接使用object[key]的方式去调用,自然就能调用到


    最后,请注意社区管理规定有提到,注意不要使用不文明的语言对他人进行负面评价


    以上。

    2017-03-31
    有用
    回复
  • 7.
    7.
    2017-03-31

    这只是个示例。。。

    2017-03-31
    有用
    回复
  • 谢统华
    谢统华
    2017-03-31
    <view bindtap="tapTab"></view>



    你这个标签里面什么都没有,怎么可能找得到?

    2017-03-31
    有用
    回复
  • 7.
    7.
    2017-03-31

    好吧,也许是我提问的方式有问题(先道个歉)。 不能说是严重bug 我不知道你们怎么实现的但是从开发者角度俩说,希望能解决这个问题。

    2017-03-31
    有用
    回复
登录 后发表内容