HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

修改PopPicker 增加动态级联能力。

mui

主要思路是增加一个change入口, 当选项发生改变时可以触发自己的级联逻辑。

var province = new mui.PopPicker(  
            {layer: 3,  
                //change  
                changeFn:function(even){  
                    //change 自己的逻辑  
                                       var nextPickerElement = this.nextSibling;  
                    if (nextPickerElement && nextPickerElement.picker) {  
                        var eventData = event.detail || {};  
                        var preItem = eventData.item || {};  
                        if (preItem.type == 'province'){  
                            nextPickerElement.picker.setItems(getCascadeData("cities", preItem.value));  
                        } else if (preItem.type == 'cities'){  
                            nextPickerElement.picker.setItems(getCascadeData("counties", preItem.value));  
                        }  
                    }  
                }  
            });
var PopPicker = $.PopPicker = $.Class.extend({  
        //构造函数  
        init: function(options) {  
            var self = this;  
            self.options = options || {};  
            self.options.buttons = self.options.buttons || ['取消', '确定'];  
            self.panel = $.dom(panelBuffer)[0];  
            document.body.appendChild(self.panel);  
            self.ok = self.panel.querySelector('.mui-poppicker-btn-ok');  
            self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');  
            self.body = self.panel.querySelector('.mui-poppicker-body');  
            self.mask = $.createMask();  
            self.cancel.innerText = self.options.buttons[0];  
            self.ok.innerText = self.options.buttons[1];  
            self.cancel.addEventListener('tap', function(event) {  
                self.hide();  
            }, false);  
            self.ok.addEventListener('tap', function(event) {  
                if (self.callback) {  
                    var rs = self.callback(self.getSelectedItems());  
                    if (rs !== false) {  
                        self.hide();  
                    }  
                }  
            }, false);  

            **self.changeFn = self.options.changeFn || function(event) {  
                var nextPickerElement = this.nextSibling;  
                if (nextPickerElement && nextPickerElement.picker) {  
                    var eventData = event.detail || {};  
                    var preItem = eventData.item || {};  
                    nextPickerElement.picker.setItems(preItem.children);  
                }  
            };**  

            self.mask[0].addEventListener('tap', function() {  
                self.hide();  
            }, false);  
            self._createPicker();  
            //防止滚动穿透  
            self.panel.addEventListener('touchstart', function(event) {  
                event.preventDefault();  
            }, false);  
            self.panel.addEventListener('touchmove', function(event) {  
                event.preventDefault();  
            }, false);  
        },  
        _createPicker: function() {  
            var self = this;  
            var layer = self.options.layer || 1;  
            var width = (100 / layer) + '%';  
            self.pickers = [];  
            for (var i = 1; i <= layer; i++) {  
                var pickerElement = $.dom(pickerBuffer)[0];  
                pickerElement.style.width = width;  
                self.body.appendChild(pickerElement);  
                var picker = $(pickerElement).picker();  
                self.pickers.push(picker);  
                pickerElement.addEventListener('change', self.changeFn, false);  
            }  
        },  
        //填充数据  
        setData: function(data) {  
            var self = this;  
            data = data || [];  
            self.pickers[0].setItems(data);  
        },  
        //获取选中的项(数组)  
        getSelectedItems: function() {  
            var self = this;  
            var items = [];  
            for (var i in self.pickers) {  
                var picker = self.pickers[i];  
                items.push(picker.getSelectedItem() || {});  
            }  
            return items;  
        },  
        //显示  
        show: function(callback) {  
            var self = this;  
            self.callback = callback;  
            self.mask.show();  
            document.body.classList.add($.className('poppicker-active-for-page'));  
            self.panel.classList.add($.className('active'));  
            //处理物理返回键  
            self.__back = $.back;  
            $.back = function() {  
                self.hide();  
            };  
        },  
        //隐藏  
        hide: function() {  
            var self = this;  
            if (self.disposed) return;  
            self.panel.classList.remove($.className('active'));  
            self.mask.close();  
            document.body.classList.remove($.className('poppicker-active-for-page'));  
            //处理物理返回键  
            $.back=self.__back;  
        },  
        dispose: function() {  
            var self = this;  
            self.hide();  
            setTimeout(function() {  
                self.panel.parentNode.removeChild(self.panel);  
                for (var name in self) {  
                    self[name] = null;  
                    delete self[name];  
                };  
                self.disposed = true;  
            }, 300);  
        }  
    });
继续阅读 »

主要思路是增加一个change入口, 当选项发生改变时可以触发自己的级联逻辑。

var province = new mui.PopPicker(  
            {layer: 3,  
                //change  
                changeFn:function(even){  
                    //change 自己的逻辑  
                                       var nextPickerElement = this.nextSibling;  
                    if (nextPickerElement && nextPickerElement.picker) {  
                        var eventData = event.detail || {};  
                        var preItem = eventData.item || {};  
                        if (preItem.type == 'province'){  
                            nextPickerElement.picker.setItems(getCascadeData("cities", preItem.value));  
                        } else if (preItem.type == 'cities'){  
                            nextPickerElement.picker.setItems(getCascadeData("counties", preItem.value));  
                        }  
                    }  
                }  
            });
var PopPicker = $.PopPicker = $.Class.extend({  
        //构造函数  
        init: function(options) {  
            var self = this;  
            self.options = options || {};  
            self.options.buttons = self.options.buttons || ['取消', '确定'];  
            self.panel = $.dom(panelBuffer)[0];  
            document.body.appendChild(self.panel);  
            self.ok = self.panel.querySelector('.mui-poppicker-btn-ok');  
            self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');  
            self.body = self.panel.querySelector('.mui-poppicker-body');  
            self.mask = $.createMask();  
            self.cancel.innerText = self.options.buttons[0];  
            self.ok.innerText = self.options.buttons[1];  
            self.cancel.addEventListener('tap', function(event) {  
                self.hide();  
            }, false);  
            self.ok.addEventListener('tap', function(event) {  
                if (self.callback) {  
                    var rs = self.callback(self.getSelectedItems());  
                    if (rs !== false) {  
                        self.hide();  
                    }  
                }  
            }, false);  

            **self.changeFn = self.options.changeFn || function(event) {  
                var nextPickerElement = this.nextSibling;  
                if (nextPickerElement && nextPickerElement.picker) {  
                    var eventData = event.detail || {};  
                    var preItem = eventData.item || {};  
                    nextPickerElement.picker.setItems(preItem.children);  
                }  
            };**  

            self.mask[0].addEventListener('tap', function() {  
                self.hide();  
            }, false);  
            self._createPicker();  
            //防止滚动穿透  
            self.panel.addEventListener('touchstart', function(event) {  
                event.preventDefault();  
            }, false);  
            self.panel.addEventListener('touchmove', function(event) {  
                event.preventDefault();  
            }, false);  
        },  
        _createPicker: function() {  
            var self = this;  
            var layer = self.options.layer || 1;  
            var width = (100 / layer) + '%';  
            self.pickers = [];  
            for (var i = 1; i <= layer; i++) {  
                var pickerElement = $.dom(pickerBuffer)[0];  
                pickerElement.style.width = width;  
                self.body.appendChild(pickerElement);  
                var picker = $(pickerElement).picker();  
                self.pickers.push(picker);  
                pickerElement.addEventListener('change', self.changeFn, false);  
            }  
        },  
        //填充数据  
        setData: function(data) {  
            var self = this;  
            data = data || [];  
            self.pickers[0].setItems(data);  
        },  
        //获取选中的项(数组)  
        getSelectedItems: function() {  
            var self = this;  
            var items = [];  
            for (var i in self.pickers) {  
                var picker = self.pickers[i];  
                items.push(picker.getSelectedItem() || {});  
            }  
            return items;  
        },  
        //显示  
        show: function(callback) {  
            var self = this;  
            self.callback = callback;  
            self.mask.show();  
            document.body.classList.add($.className('poppicker-active-for-page'));  
            self.panel.classList.add($.className('active'));  
            //处理物理返回键  
            self.__back = $.back;  
            $.back = function() {  
                self.hide();  
            };  
        },  
        //隐藏  
        hide: function() {  
            var self = this;  
            if (self.disposed) return;  
            self.panel.classList.remove($.className('active'));  
            self.mask.close();  
            document.body.classList.remove($.className('poppicker-active-for-page'));  
            //处理物理返回键  
            $.back=self.__back;  
        },  
        dispose: function() {  
            var self = this;  
            self.hide();  
            setTimeout(function() {  
                self.panel.parentNode.removeChild(self.panel);  
                for (var name in self) {  
                    self[name] = null;  
                    delete self[name];  
                };  
                self.disposed = true;  
            }, 300);  
        }  
    });
收起阅读 »

指令集支持

建议指令集支持到armv7s,方便使用,否则工程本身需要支持到armv7s时,导入sdk很是不方便

建议指令集支持到armv7s,方便使用,否则工程本身需要支持到armv7s时,导入sdk很是不方便

边改边看、浏览器运行如何查看asp、jsp文件

浏览器运行 边改边看 JSP ASP

在HBuilde里运行asp、jsp文件需要设置这些文件使用何种服务器打开
配置如下:
工具-选项-HBuilder-web服务器,选择asp类文件、jsp类文件使用服务器类型


也可以在边改边看最左边设置处修改,如下图

继续阅读 »

在HBuilde里运行asp、jsp文件需要设置这些文件使用何种服务器打开
配置如下:
工具-选项-HBuilder-web服务器,选择asp类文件、jsp类文件使用服务器类型


也可以在边改边看最左边设置处修改,如下图

收起阅读 »

HBuilder模板语法提示说明

代码助手

HBuilder7.1起支持模板语法提示。
模板语法提示,指对angularjs、vue等框架的html模板{{}}内语法的提示
目前暂时实现了对已编写的html模板内出现的单词进行提示。提示方式如下
如下图所示,项目中存在9个vue模板


其中filter.vue内有{{item.title}}、{{option.value}}等内容

在其他的vue文件的{{}}内,可对item、title、option、vaule等内容进行提示,如下图

继续阅读 »

HBuilder7.1起支持模板语法提示。
模板语法提示,指对angularjs、vue等框架的html模板{{}}内语法的提示
目前暂时实现了对已编写的html模板内出现的单词进行提示。提示方式如下
如下图所示,项目中存在9个vue模板


其中filter.vue内有{{item.title}}、{{option.value}}等内容

在其他的vue文件的{{}}内,可对item、title、option、vaule等内容进行提示,如下图

收起阅读 »

为何那么多一线互联网公司做流应用?

流应用

流应用是一个很多人不太容易理解的新概念,从去年大众点评外卖流应用上线时,很多人就不理解:

  1. 大众点评有原生版,为何又单独立项做流应用?成本增加了啊;
  2. 为何要做一个只能在360手助发行的版本?获取用户的潜在基数小了啊。

流应用接下来的发展就让人“更难理解”了,京东、360、有道、唯品会、携程、去哪儿、途牛、驴妈妈、神州专车、蘑菇街、当当、e代驾、卖座电影、爱鲜蜂…这些一线互联网公司怎么都在做流应用?
连做游戏的也进来了,传奇世界流应用也上线了,DCloud并没有专用游戏引擎,他们干啥呢?

其实不止是这些厂家,按目前的业务发展速度,预计年内主流的互联网App大多都会有流应用版本。

有人怀疑难道360手助强压开发商做流应用?然后由DCloud为其外包开发?
当然也不是,大家做流应用都是自愿投人投钱做,有的公司的流应用团队还不小,市场、产品、技术、运营、测试组成十几人的团队负责流应用项目。

可是流应用到底有什么魅力把这些大公司们纷纷卷进来呢?
还有,DCloud一直说面向开发者免费,工具免费、自己也不接项目开发,它怎么挣钱,它到底想干啥?
这个问题这几年一直被人问,现在也该解释了。

开发者做App,目的不是“做App”,而是给移动互联网用户提供服务。
如何获取用户、获得订单、持续复购或持续看广告?这是更根本的问题。
DCloud给开发者提供的,是一个基于HTML5的、从开发到获取用户到持续商业变现的全流程闭环生态。
并且是一个获客成本、用户质量、运营指标比原生生态更优质的新生态。
具体来讲,

  1. 获客成本低
    一个原生app的下载成本几元、激活成本十几元,新客几十元。而流应用可以把这个成本下降数倍。
  2. 获客质量不变
    流应用因为能达到原生的功能和体验,其留存、注册转换、订单转换、复购率等各项指标与原生app并无差别。DCloud为流应用开发者提供了专业的运营报表分析系统,可协助开发者优化各项业务指标。
  3. 获客数量多
    为什么流应用目前只有360手助上能搜索到,就能有足够多用户量来满足一线互联网公司的胃口?
    因为流应用的主流获取方式,并不是以前人们理解那种在应用市场搜索点击下载的方式。
    流应用有5种获取方式,push、wap导量、应用市场内点击、快码扫描、社交推广(这里有各种方式的视频可以看)。在这些获客方式里,传统的应用市场搜索点击的方式并不是主流量来源。
    2016年春节,DCloud为某电影票流应用厂商做push推广,发送《美人鱼》特价电影票,一次push获取了8万用户。获客效率之高是原生App推广不可比拟的。
    4月19日唯品会周年大促,也委托DCloud进行流应用push推广。因为在流应用引擎覆盖的几亿用户中,即使是一线互联网公司,其App装机占比超过20%也是寥寥无几,大量空白的用户市场需要占领挖掘。
    除了拉新,提升原有流量质量也是开发商很关心的事情。秒开、wap导量、快码等流应用发行方式能把开发商原来的低效的线上线下流量的效率提升数倍,这都是非常吸引开发商的地方。

虽然流应用好处多多,但总结这几条就够App开发商重视了。获客量大、获客成本低、获客后的运营数据指标好,大公司又不缺人,为什么不做流应用呢?
而且大公司的很多前端本身也是Hbuilder的用户,上手开发很快。

这就是大公司们纷纷做流应用的基础逻辑,很多人没想到,但说穿了也不难理解。
当然流应用不是大公司们的专属产品,创业公司一样非常需要。
创业公司的App受众面一般较窄,服务特定人群,在应用市场打广告推广是不可行的。
如何找到定向用户群,这也是流应用的重要价值。
DCloud在流应用推广中是可以定向推广的,学生、车主、球迷、女性甚至孕妇…流应用能提前根据用户画像特征更有效的对接用户和开发商的需求。

说到这儿大部分人就明白了,DCloud的变现不是通过做开发服务,而是通过发行变现。
有人还以为DCloud最近在帮各大厂商开发流应用进行收费,不是的,DCloud真的不挣开发费。
DCloud公司从成立就不是为了制作和销售App开发工具,而是为了推动HTML5的发展,重构移动互联网目前原生为主的产业生态。
左边,我们让开发者可以降低开发成本、提升获客效率;
右边,我们让手机用户省流量省空间省电,方便的获取更多优质应用服务。
DCloud不但不挣开发方面的钱,还努力给开发者免费提供比商业产品还优秀的开发工具,是希望开发者们可以制造出丰富、优质的基于HTML5的移动互联网内容。
但是不要误会发布流应用就收费,发布流应用到应用市场是免费的,只是当你计划投资推广App时,DCloud是最佳投放partner。
就像你做网站是不用给google付费的,但想推广网站就会发现google最靠谱。当然google在互联网初期并没有提供开发工具和浏览器,但这些事DCloud都做了。

08年时,人们想不到5年后的移动互联网竟然发展成这个样子。
未来也一样,HTML5重构的移动互联网生态和现在不一样,这里面有太多新机会。
对于外包商而言,他们可以做DCloud的代理,给他们的雇主提供从开发到发行的全套服务,甚至有些外包商已经给雇主免费做app但每个激活用户收取xx元。
对于工程师,流应用是一个很酷的新技能,很多大公司都需要熟悉流应用的高级开发者,值得大家花时间学习。我们有很多广告主有外包开发需求,DCloud并不接包,也可以引荐优秀的开发者接外包。

不知不觉中,各位也将见证中国发生世界级的革新。不过流应用毕竟太新,当前也还存在各种问题,希望大家一起支持流应用的发展。
大家可能还有很多疑问,欢迎到流应用QQ群交流471285299。

备注:

  1. 有开发者担心DCloud大力发展流应用会影响开发工具产品进步。
    这个不但不会,反而在众多一线互联网公司的严苛要求下,DCloud的产品体验越来越好、细节越来越完善。
  2. 有开发者不清楚DCloud的流应用上亿引擎覆盖率是怎么来的,担心自己打包成apk、ipa的变成流应用的引擎。
    不是这样的。DCloud的流应用引擎是独立的,不能内嵌在开发者的app里,其装机量和数据来源主要来自合作的应用市场。开发者打包的原生安装包并没有流应用引擎。有开发者提出想在apk里内嵌流应用引擎怎么办,后续DCloud会推出将允许开发者内嵌流应用引擎到app里的版本。
继续阅读 »

流应用是一个很多人不太容易理解的新概念,从去年大众点评外卖流应用上线时,很多人就不理解:

  1. 大众点评有原生版,为何又单独立项做流应用?成本增加了啊;
  2. 为何要做一个只能在360手助发行的版本?获取用户的潜在基数小了啊。

流应用接下来的发展就让人“更难理解”了,京东、360、有道、唯品会、携程、去哪儿、途牛、驴妈妈、神州专车、蘑菇街、当当、e代驾、卖座电影、爱鲜蜂…这些一线互联网公司怎么都在做流应用?
连做游戏的也进来了,传奇世界流应用也上线了,DCloud并没有专用游戏引擎,他们干啥呢?

其实不止是这些厂家,按目前的业务发展速度,预计年内主流的互联网App大多都会有流应用版本。

有人怀疑难道360手助强压开发商做流应用?然后由DCloud为其外包开发?
当然也不是,大家做流应用都是自愿投人投钱做,有的公司的流应用团队还不小,市场、产品、技术、运营、测试组成十几人的团队负责流应用项目。

可是流应用到底有什么魅力把这些大公司们纷纷卷进来呢?
还有,DCloud一直说面向开发者免费,工具免费、自己也不接项目开发,它怎么挣钱,它到底想干啥?
这个问题这几年一直被人问,现在也该解释了。

开发者做App,目的不是“做App”,而是给移动互联网用户提供服务。
如何获取用户、获得订单、持续复购或持续看广告?这是更根本的问题。
DCloud给开发者提供的,是一个基于HTML5的、从开发到获取用户到持续商业变现的全流程闭环生态。
并且是一个获客成本、用户质量、运营指标比原生生态更优质的新生态。
具体来讲,

  1. 获客成本低
    一个原生app的下载成本几元、激活成本十几元,新客几十元。而流应用可以把这个成本下降数倍。
  2. 获客质量不变
    流应用因为能达到原生的功能和体验,其留存、注册转换、订单转换、复购率等各项指标与原生app并无差别。DCloud为流应用开发者提供了专业的运营报表分析系统,可协助开发者优化各项业务指标。
  3. 获客数量多
    为什么流应用目前只有360手助上能搜索到,就能有足够多用户量来满足一线互联网公司的胃口?
    因为流应用的主流获取方式,并不是以前人们理解那种在应用市场搜索点击下载的方式。
    流应用有5种获取方式,push、wap导量、应用市场内点击、快码扫描、社交推广(这里有各种方式的视频可以看)。在这些获客方式里,传统的应用市场搜索点击的方式并不是主流量来源。
    2016年春节,DCloud为某电影票流应用厂商做push推广,发送《美人鱼》特价电影票,一次push获取了8万用户。获客效率之高是原生App推广不可比拟的。
    4月19日唯品会周年大促,也委托DCloud进行流应用push推广。因为在流应用引擎覆盖的几亿用户中,即使是一线互联网公司,其App装机占比超过20%也是寥寥无几,大量空白的用户市场需要占领挖掘。
    除了拉新,提升原有流量质量也是开发商很关心的事情。秒开、wap导量、快码等流应用发行方式能把开发商原来的低效的线上线下流量的效率提升数倍,这都是非常吸引开发商的地方。

虽然流应用好处多多,但总结这几条就够App开发商重视了。获客量大、获客成本低、获客后的运营数据指标好,大公司又不缺人,为什么不做流应用呢?
而且大公司的很多前端本身也是Hbuilder的用户,上手开发很快。

这就是大公司们纷纷做流应用的基础逻辑,很多人没想到,但说穿了也不难理解。
当然流应用不是大公司们的专属产品,创业公司一样非常需要。
创业公司的App受众面一般较窄,服务特定人群,在应用市场打广告推广是不可行的。
如何找到定向用户群,这也是流应用的重要价值。
DCloud在流应用推广中是可以定向推广的,学生、车主、球迷、女性甚至孕妇…流应用能提前根据用户画像特征更有效的对接用户和开发商的需求。

说到这儿大部分人就明白了,DCloud的变现不是通过做开发服务,而是通过发行变现。
有人还以为DCloud最近在帮各大厂商开发流应用进行收费,不是的,DCloud真的不挣开发费。
DCloud公司从成立就不是为了制作和销售App开发工具,而是为了推动HTML5的发展,重构移动互联网目前原生为主的产业生态。
左边,我们让开发者可以降低开发成本、提升获客效率;
右边,我们让手机用户省流量省空间省电,方便的获取更多优质应用服务。
DCloud不但不挣开发方面的钱,还努力给开发者免费提供比商业产品还优秀的开发工具,是希望开发者们可以制造出丰富、优质的基于HTML5的移动互联网内容。
但是不要误会发布流应用就收费,发布流应用到应用市场是免费的,只是当你计划投资推广App时,DCloud是最佳投放partner。
就像你做网站是不用给google付费的,但想推广网站就会发现google最靠谱。当然google在互联网初期并没有提供开发工具和浏览器,但这些事DCloud都做了。

08年时,人们想不到5年后的移动互联网竟然发展成这个样子。
未来也一样,HTML5重构的移动互联网生态和现在不一样,这里面有太多新机会。
对于外包商而言,他们可以做DCloud的代理,给他们的雇主提供从开发到发行的全套服务,甚至有些外包商已经给雇主免费做app但每个激活用户收取xx元。
对于工程师,流应用是一个很酷的新技能,很多大公司都需要熟悉流应用的高级开发者,值得大家花时间学习。我们有很多广告主有外包开发需求,DCloud并不接包,也可以引荐优秀的开发者接外包。

不知不觉中,各位也将见证中国发生世界级的革新。不过流应用毕竟太新,当前也还存在各种问题,希望大家一起支持流应用的发展。
大家可能还有很多疑问,欢迎到流应用QQ群交流471285299。

备注:

  1. 有开发者担心DCloud大力发展流应用会影响开发工具产品进步。
    这个不但不会,反而在众多一线互联网公司的严苛要求下,DCloud的产品体验越来越好、细节越来越完善。
  2. 有开发者不清楚DCloud的流应用上亿引擎覆盖率是怎么来的,担心自己打包成apk、ipa的变成流应用的引擎。
    不是这样的。DCloud的流应用引擎是独立的,不能内嵌在开发者的app里,其装机量和数据来源主要来自合作的应用市场。开发者打包的原生安装包并没有流应用引擎。有开发者提出想在apk里内嵌流应用引擎怎么办,后续DCloud会推出将允许开发者内嵌流应用引擎到app里的版本。
收起阅读 »

HBuilder中文输入法免干扰功能说明

代码助手

HBuilder7.1起支持中文符合自动替换为英文符合。
中文符号免干扰指在编写html、js、css代码时,如果处于中文输入法状态,自动将必要的符号如:;。等转为: ; .等。
如下图:
①在HTML区域输入《

②在js区域输入。


③在css 输入 》

如你不需要此功能,请在工具-选项-HBuilder-编辑器的对应html、js、css、json编辑器类型中调整
如下图:

A处开关勾选后,开启HTML文件中文免干扰功能,B处是要转义的中文字符

继续阅读 »

HBuilder7.1起支持中文符合自动替换为英文符合。
中文符号免干扰指在编写html、js、css代码时,如果处于中文输入法状态,自动将必要的符号如:;。等转为: ; .等。
如下图:
①在HTML区域输入《

②在js区域输入。


③在css 输入 》

如你不需要此功能,请在工具-选项-HBuilder-编辑器的对应html、js、css、json编辑器类型中调整
如下图:

A处开关勾选后,开启HTML文件中文免干扰功能,B处是要转义的中文字符

收起阅读 »

下拉刷新后, 如何定位到某一位置呢

下拉刷新

下拉刷新后, 如何定位到某一位置呢

下拉刷新后, 如何定位到某一位置呢

XHRHTTPREQUEST的一个坑

ajax

我使用xhrhttprequest发送POST请求,按照官网说得在调用send方法的时候传送data参数,后台死活取不到值,后面测试一看才知道传送的data参数是在作为body数据传送过去,后台接收的post参数为空,raw参数才是我们传送的值
后来改为mui.ajax就没问题了.....
特记录在这里,免得大家入坑

继续阅读 »

我使用xhrhttprequest发送POST请求,按照官网说得在调用send方法的时候传送data参数,后台死活取不到值,后面测试一看才知道传送的data参数是在作为body数据传送过去,后台接收的post参数为空,raw参数才是我们传送的值
后来改为mui.ajax就没问题了.....
特记录在这里,免得大家入坑

收起阅读 »

关于二级页面返回后刷新一级页面的实践

返回刷新 mui

var taskList = plus.webview.getWebviewById('tasklist');
taskList.reload();
mui.back();

1、上面是我根据官方的提示方法,以及问答社区朋友的回答,得到的返回刷新页面的方法。

2、具体实现方法是,把以上代码放到触发返回刷新事件的元素上

document.getElementById("btn").addEventListener("tap", function() {  
       var taskList = plus.webview.getWebviewById('tasklist');  
       taskList.reload();  
       mui.back();  
}

3、getWebviewById('tasklist');中的tasklist即为要刷新的页面的id,但是这个id从何而来呢?

4、其实除了入口页面,其他页面都是可以通过openwindow的时候追加id的,也就是说是通过要刷新的页面的上一个页面得来。

mui.openWindow({  
        url: 'my-task-list.html',  
        id: 'tasklist',  
}

5、我在处理返回刷新的时候在getWebviewById这里卡了很久,记录下来,以备查阅。

继续阅读 »

var taskList = plus.webview.getWebviewById('tasklist');
taskList.reload();
mui.back();

1、上面是我根据官方的提示方法,以及问答社区朋友的回答,得到的返回刷新页面的方法。

2、具体实现方法是,把以上代码放到触发返回刷新事件的元素上

document.getElementById("btn").addEventListener("tap", function() {  
       var taskList = plus.webview.getWebviewById('tasklist');  
       taskList.reload();  
       mui.back();  
}

3、getWebviewById('tasklist');中的tasklist即为要刷新的页面的id,但是这个id从何而来呢?

4、其实除了入口页面,其他页面都是可以通过openwindow的时候追加id的,也就是说是通过要刷新的页面的上一个页面得来。

mui.openWindow({  
        url: 'my-task-list.html',  
        id: 'tasklist',  
}

5、我在处理返回刷新的时候在getWebviewById这里卡了很久,记录下来,以备查阅。

收起阅读 »

每日一课 跨平台APP开发精品公开课

mui HBuilder

腾讯课堂专业IT培训,每天都有免费公开课,想学习的同学们来听课,可以收藏课表,HTML+CSS课程,JavaScript课程,跨平台APP开发课程,全天三个时间段免费直播,老师在线交流, 马上学习 >>>跨平台app开发精品课

继续阅读 »

腾讯课堂专业IT培训,每天都有免费公开课,想学习的同学们来听课,可以收藏课表,HTML+CSS课程,JavaScript课程,跨平台APP开发课程,全天三个时间段免费直播,老师在线交流, 马上学习 >>>跨平台app开发精品课

收起阅读 »

ajax像jq一样通过表单序列化方式提交表单

mui

      mui.ajax('url', {  
            data: $("#form").serialize(),  
            dataType: 'json',  
            type: 'post',  
            timeout: 10000,  
            success: function(data) {  
                //成功的操作  
            },  
            error: function(xhr, type, errorThrown) {  
                //失败的操作  
            }  
      });  

没错,就是设置data的值为$("#form").serialize(),不过这样要引入jquery,好像官方不太建议直接引入jq,不知道有没有更好的方法去序列化一个表单

继续阅读 »

      mui.ajax('url', {  
            data: $("#form").serialize(),  
            dataType: 'json',  
            type: 'post',  
            timeout: 10000,  
            success: function(data) {  
                //成功的操作  
            },  
            error: function(xhr, type, errorThrown) {  
                //失败的操作  
            }  
      });  

没错,就是设置data的值为$("#form").serialize(),不过这样要引入jquery,好像官方不太建议直接引入jq,不知道有没有更好的方法去序列化一个表单

收起阅读 »