起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3652|回复: 2

[分享] windowContainer.set({src:src}) 问题及应用窍诀!!!

[复制链接]

28

主题

117

帖子

677

积分

高级会员

Rank: 4

积分
677
QQ
发表于 2018-7-27 16:58:22 | 显示全部楼层 |阅读模式
本帖最后由 爱我的老鼠 于 2018-7-27 19:03 编辑

1,问题:

下面代码是更改container的,没有bug。
Model.prototype.setOne = function() {
            var srcw = require.toUrl("$UI/mp/ds/one.w");
            foundContainer.set({src:srcw});
            foundContainer.refresh();
};

如果setOne放在 modelLoad 事件里面 执行,那么APP(包括网页),顶部都会出现一个很走到 一半的蓝色进度条,一直处于pending状态。
Model.prototype.modelLoad = function(event) {
        this.setOneStock();  //顶部蓝色进度条一直处于未完成状态,执行到一半就不再往下走了,跟踪会发现pending.
}
如果单独做1个按钮执行setOne,(前提:modelLoad 已经执行完毕了),就不会出现上面pending状态。

2,解决窍诀:container组件必须设置autoload=false,在 contents2ActiveChange 中实现 load!


官方参考文档:http://docs.wex5.com/wex5-ui-question-list-2083/
WindowContainer 组件的autoLoad 设置为false , contents切换的时候判断是否是当前的content,如果是就调用 windowContainer 组件的 load() 方法,可以参考:/UI2/demo/taobao/main.w    contents组件的绑定方法 contents2ActiveChange 实现!
如果只需要加载一次,可以通过WindowContainer ._isFirst 判断是否已经加载过了!可以避免重复加载!

我的代码:

    Model.prototype.contentsActiveChange = function(event){
        var to = event.to;
        if (to < 1) { return; }
        //
        var c1 = this.comp('foundContainer');
        var c2 = this.comp('shoppingContainer');
        var c3 = this.comp('userContainer');
        //
        if (to === 1){
            if (c1._isFirst){ this.foundLoad();    }
        }
        if (to === 2){
            if (c2._isFirst){c2.load();    }
        }
        if (to === 3){
            if (c3._isFirst){c3.load();    }
        }
    };
       Model.prototype.foundLoad = function() {
        var foundContainer = this.comp("foundContainer");
        if (this._mo === 0){
            var srcw = require.toUrl("$UI/mp/ds/gone.w");
            foundContainer.set({src:srcw});
            foundContainer.refresh();
        }else{
            foundContainer.load();
        }
      };






28

主题

117

帖子

677

积分

高级会员

Rank: 4

积分
677
QQ
 楼主| 发表于 2018-7-27 17:09:29 | 显示全部楼层
本帖最后由 爱我的老鼠 于 2018-7-27 19:05 编辑

我曾经尝试用延迟加载来[变通]解决,但是兼容性很差!
        Model.prototype.lazyLoad = function() {
                var me = this;
                setTimeout(function() {
                                me.setOne();  //延迟1秒后,更改foundContainer.src,这样尽管蓝色条会走第2次,但至少能解决问题!
                }, 1000);
        };
上面方法,一定要放在 modelLoad 方法最后1行!!!
setTimeout 存在浏览器兼容性问题,在firefox和小米浏览器上,不起作用!!!


回复 支持 反对

使用道具 举报

2

主题

25

帖子

337

积分

中级会员

Rank: 3Rank: 3

积分
337
QQ
发表于 2023-4-17 14:34:30 来自手机 | 显示全部楼层
mark
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-27 01:07 , Processed in 0.062081 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表