lzt
lzt
  • 发布:2015-02-11 18:09
  • 更新:2015-11-07 18:52
  • 阅读:2464

预加载链问题

分类:MUI

预见加载使用的函数是 mui.preload。
假设此时有三个页面 A B C。
A为主页面,进入后预加载B,B预加载C。
此时进入A页面时就会加载B页面,我看控制台的输出,B页面虽然没有显示,但是javascript代码已经被执行了,然后C页面也会被预加载。
上述过程在本来是没什么问题的,但是在开发阶段,编辑A页面时保存,手机上的HBuild程序就会自动重新加载A页面,此时A页面的js就会被执行一次,然后就会预加载B,再预加载C。。。
从控制台后,每次预加载都创建了一个新的B C 页面,但是老的B C页面还依然存在。然后过不了多久就会出现 Uncaught RangeError: Maximum call stack size exceeded. 错误。

不知道是不是我使用方式有问题?

还有一个小问题,为一个button绑定个tap事件,假设<button id='btn'></button>,使用 mui('#btn').on('tap', function(){}) 不行,使用 mui('#btn').on('tap', 'button', function(){})也不行。。最后只能使用 addEventListener函数了。。
看demo上 mui().on() 函数都是使用在 ul 标签上的,这个函数是只能在ul 标签上使用?还是必须要在父标签上使用? 文档里找了好久都没有找到相关的说明。。

最后,有没有一个类似 jquery 的 $.trigger() 的函数。

谢谢~

2015-02-11 18:09 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

1.预加载的问题,你那样使用preload的话,是会存在你这样的问题。看你业务是否需要这样加载,真机联调很难处理到多个webview之间的关系,目前只是同步当前这个webview,所以就会造成你那样的问题。建议,将preload放在当前页面显示之后再去preload其他页面。

2.目前mui.on方法仅适用于批量委托代理(给多个子元素增加同类事件),单个按钮添加事件请使用addEventListener,mui.on并不仅限于ul,通常都是mui(parent).on('tap',child,function(){});这样用

3.mui.trigger(element, eventType, eventData);

  • lzt (作者)

    感谢解答,“1.页面显示之后再preload其他页面”,页面显示有没有相应的事件,还是自己绑定个事件,每次显示的时候手动触发?

    这个功能印象中好像在哪见过,现在找不着了。。。

    谢谢!~

    2015-02-12 09:30

  • DCloud_UNI_FXY

    试试pagebeforeshow事件

    2015-02-12 12:22

  • lzt (作者)

    不行。。load事件也不行,resume也不行。自己加了个事件,在显示前用mui.fire触发。。。

    2015-02-12 13:16

hiweek

hiweek

“。。。建议,将preload放在当前页面显示之后再去preload其他页面。。。”

请教,上面的建议如何做到?即——

a加载b,b要加载c,如何显示了b再加载c?

谢谢!

我勒个去

我勒个去

监听window的页面显示后事件,放在这个事件里,

  • hiweek

    多谢先!

    2015-11-07 14:27

hiweek

hiweek

貌似解决了,实例:

a页面中: mui.fire(plus.webview.getWebviewById('xxx'), 'updateHeader', {});

b页面中:window.addEventListener('updateHeader',function(event){ 加载c});

  • hiweek

    问题来了,c页面中的mui().on('tap','a',function()无效,放在mui.plusready()内外都一样,为什么?求解!

    2015-11-07 18:13

hiweek

hiweek

问题来了,c页面中的mui().on('tap','a',function()无效,放在mui.plusready()内外都一样,为什么?求解!

hiweek

hiweek

解决了,将mui().on('tap','a',function()放在b页的ajax成功事件中。

该问题目前已经被锁定, 无法添加新回复