NotFish
NotFish
  • 发布:2017-04-24 10:09
  • 更新:2017-04-24 11:36
  • 阅读:1221

使用mui.open后,会发生什么?

分类:MUI

mui.open是打开一个新窗口
但是这个函数会触发一些什么事件呢?

  1. 会不会向当前窗口发送隐藏(Hide)事件呢?
  2. 会不会向新窗口发送显示(Show)事件呢?

当一个页面有子页面的时候,当程序让其中一个子页面显示的时候,为什么不会触发这个子页面的Show事件呢?

2017-04-24 10:09 负责人:无 分享
已邀请:
chender

chender - 与人为善

open一个新的webview的时候,只是显示一个“z-index值“更大的webview,比如你有一个全屏的a页面,现在你要显示一个半屏的b页面,那么b.show之后如果a直接就隐藏了,那就出问题了

  • NotFish (作者)

    还是觉得逻辑不对,subpage是subpage,page是page。open一个page肯定要隐藏当前page。open一个subpage肯定也要发一个事件给page

    2017-04-24 11:46

  • chender

    回复 NotFish:如果打开的时候要隐藏当前页面,我上面说的这种场景就会有问题了,如果你确实需要隐藏当前页面,你可以调hide方法进行隐藏;第一次打开一个webview的时候,mui.init就是给你的事件,第二次打开的时候,会触发其show事件

    2017-04-24 12:15

  • NotFish (作者)

    subpage是subpage,page是page

    2017-04-24 14:19

  • chender

    回复 NotFish:你的意思是一个页面有几个已经创建好的子页面,然后 某个子页面.show的时候,没有触发show事件?

    如果真是这样的,那确实是bug

    2017-04-24 14:25

  • NotFish (作者)

    比如在这样一个场景下:

    一个主页,多个次级页面,主页下三个子页(subpage)

    有这么一些情况



    1. 主页进入时,子页预加载完,并已经显示出来了,子页并不会收到show事件

    2. 子页的一个action导致切换到某个次级页面(使用open),主页和子页都并不会收到hide事件,当次级页面事务完成,back时,主页及其子页也不会收到show事件

    2017-04-24 16:21

  • chender

    第一个问题:不管是page还是subpage,都是webview,webview第一次被创建的时候默认就是显示的状态,并且不会触发show事件

    第二个问题:打开一个新页面的时候(不管是在page中打开还是subpage中打开),只是将新的页面放到webview栈的最顶层,下面的webview并不会被隐藏,只是被新的webview挡住(除非你显示地调用hide方法),这个逻辑是完全合理的,为什么合理我上面也有说到;

    返回的时候没有收到show事件原因同上javascript:;

    2017-04-24 16:28

  • NotFish (作者)

    我知道实现上没有隐藏!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!但是逻辑上它是隐藏了的,不是吗?

    2017-04-24 16:33

  • NotFish (作者)

    这种事件的逻辑是反人类的…………而且也不一定要使用show或者hide这两个单词,如果会混淆,换几个其他的单词,让逻辑更清楚点不是更好吗?

    2017-04-24 16:34

  • NotFish (作者)

    而且对view的抽象还不够,子页面和页面分的不清楚。不是说webview如何实现,而是如何抽象。子页面就是子页面,页面就是页面。

    页面显示了,子页面就显示了,页面隐藏了,子页面就隐藏了,子页面显示了,页面就知道子页面显示了,子页面隐藏了,页面就知道子页面隐藏了

    2017-04-24 16:39

  • NotFish (作者)

    再说说,“webview第一次被创建就被显示了”,不知道如何吐槽……

    2017-04-24 16:41

  • chender

    你想想dom元素是怎么处理这些问题的吧,创建出来之后需不需要show,弹出遮罩层的时候后面的元素是被遮挡还是需要hide,大部分的“界面语言“都是这样,没毛病

    2017-04-24 16:51

  • chender

    回复 NotFish:隐藏和被挡住你觉得是一个概念吗?

    2017-04-24 16:52

  • NotFish (作者)

    “而且也不一定要使用show或者hide这两个单词,如果会混淆,换几个其他的单词,让逻辑更清楚点不是更好吗?”


    而且完全被挡住了,是不是就是隐藏了?虽然实现上并不是,但是效果就是啊!开发者角度就是啊!

    2017-04-24 16:57

  • NotFish (作者)

    回复 chender:dom元素是dom元素……页面是页面……虽然实现上,可能页面的一些显示和隐藏跟dom元素一个样,但是页面的逻辑跟dom元素不一样啊

    2017-04-24 17:00

  • chender

    个人觉得被挡住和隐藏,对于使用者来说是一个概念,对于开发者来说肯定不是,使用者关注效果,开发者需要关注实际的逻辑

    2017-04-24 17:00

  • NotFish (作者)

    回复 chender:api设计者,使用api开发人员,客户……

    2017-04-25 09:53

NotFish

NotFish (作者)

不得不说,mui的文档,太水了……例子跟文档不是同一个东西

chender

chender - 与人为善

不会对当前窗口发送hide事件
如果打开的是已经存在的一个webview,或触发其show事件
第三个问题理论上是会触发子页面的show事件啊,我记得我之前都用过

  • NotFish (作者)

    第三个问题详细一点:主页面预加载子页面完成后,不会触发子页面的show事件

    2017-04-24 11:27

  • NotFish (作者)

    mui.open的逻辑不对啊,既然open了,不论是否存在,肯定要触发这个view的show啊!!!open一个新的view居然不会触发当前view的hide事件…………

    mui的事件,是不是没定义好啊?

    2017-04-24 11:29

  • chender

    回复 NotFish:无论是否子页面,加载完毕好像都不会触发show事件

    2017-04-24 11:35

  • chender

    回复 NotFish:这个问题类同于:创建一个下拉框的时候要不要马上就触发一次它的change事件

    2017-04-24 11:39

要回复问题请先登录注册