
js的reduce()方法
reduce()和reduceRight()
var numbers= [65,44,12,4];
function getSum (total,num) {
return total+num;
}
function myFunction(item) {
document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
p158 7.9.5
数值的数组
var a = [1,2,3,4,5];
var sum = a.reduce(function(x,y){return x+y});//15
var product = a.reduce(function(x,y){return xy});//数组求积
var max = a.reduce(function(x,y){return (x>y)?x:y});//求最大值
对象
/
返回一个新对象,这个对象同时拥有o的属性和p的属性
如果o和p中有重名属性,使用p中的属性值
/
function union(o,p){return extend(extend({},o),p);}
/
把p中的可枚举属性复制到o中,并返回o
如果o和p中含有同名属性,则覆盖o中的属性
这个函数并不处理getter和setter以及复制属性
/
function extend(o,p) {
for (prop in p){ //遍历p中的所有属性
o[prop] = p[prop]; //将属性添加至o中
}
return o;
}
var objects = [{x:1},{y:2},{z:3}];
var merged = objects.reduce(union); // {xL1,y:2,z:3}
var objects = [{x:1,a:1},{y:2,a:2},{z:3,a:3}];
var leftunion = objects.reduce(union); //{x:1,y:2,z:3,a:1}
var rightunion = objects.recuceRight(union);// {x:1,y:2,z:3,a:3}
reduce()和reduceRight()
var numbers= [65,44,12,4];
function getSum (total,num) {
return total+num;
}
function myFunction(item) {
document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
p158 7.9.5
数值的数组
var a = [1,2,3,4,5];
var sum = a.reduce(function(x,y){return x+y});//15
var product = a.reduce(function(x,y){return xy});//数组求积
var max = a.reduce(function(x,y){return (x>y)?x:y});//求最大值
对象
/
返回一个新对象,这个对象同时拥有o的属性和p的属性
如果o和p中有重名属性,使用p中的属性值
/
function union(o,p){return extend(extend({},o),p);}
/
把p中的可枚举属性复制到o中,并返回o
如果o和p中含有同名属性,则覆盖o中的属性
这个函数并不处理getter和setter以及复制属性
/
function extend(o,p) {
for (prop in p){ //遍历p中的所有属性
o[prop] = p[prop]; //将属性添加至o中
}
return o;
}
var objects = [{x:1},{y:2},{z:3}];
var merged = objects.reduce(union); // {xL1,y:2,z:3}
var objects = [{x:1,a:1},{y:2,a:2},{z:3,a:3}];
var leftunion = objects.reduce(union); //{x:1,y:2,z:3,a:1}
var rightunion = objects.recuceRight(union);// {x:1,y:2,z:3,a:3}

js对象取值的两种方式
var obj ={a:3,b:4,c:5};
1.使用点的方式
var v = obj.a;
2. 使用中括号的方式
配合模板字符串可以动态取值${key}
var m = obj["a"];
在实际项目中,一般使用点会方便许多,但是如果是变量的话就不能使用点了,js会
理解为对象的key值,造成混淆
key是一个变量
var n = obj[key];
js 深层对象取值
var obj = {
a: {
a3: {
a31: 1,
}
}
};
var arr = ['a', 'a3', 'a31'];
// 返回1
arr.reduce(function (acc, key) { return acc && key in acc ? acc[key] : null; }, obj);
var arr2 = ['a', 'a3', 'a32'];
// 返回null
arr2.reduce(function (acc, key) { return acc && key in acc ? acc[key] : null; }, obj);
var obj ={a:3,b:4,c:5};
1.使用点的方式
var v = obj.a;
2. 使用中括号的方式
配合模板字符串可以动态取值${key}
var m = obj["a"];
在实际项目中,一般使用点会方便许多,但是如果是变量的话就不能使用点了,js会
理解为对象的key值,造成混淆
key是一个变量
var n = obj[key];
js 深层对象取值
var obj = {
a: {
a3: {
a31: 1,
}
}
};
var arr = ['a', 'a3', 'a31'];
// 返回1
arr.reduce(function (acc, key) { return acc && key in acc ? acc[key] : null; }, obj);
var arr2 = ['a', 'a3', 'a32'];
// 返回null
arr2.reduce(function (acc, key) { return acc && key in acc ? acc[key] : null; }, obj);

vue搭建脚手架入门
一、那么我们就从最简单的环境搭建开始:
安装node.js,从node.js官网下载并安装node,安装过程很简单,一路“下一步”就可以了(傻瓜式安装)。安装完成之后,打开命令行工具(win+r,然后输入cmd),输入 node -v,如下图,如果出现相应的版本号,则说明安装成功。

这里需要说明下,因为在官网下载安装node.js后,就已经自带npm(包管理工具)了,另需要注意的是npm的版本最好是3.x.x以上,以免对后续产生影响。
安装淘宝镜像,打开命令行工具,把这个(npm install -g cnpm --registry= https://registry.npm.taobao.org)复制(这里要手动复制就是用鼠标右键那个,具体为啥不多解释),安装这里是因为我们用的npm的服务器是外国,有的时候我们安装“依赖”的时候很很慢很慢超级慢,所以就用这个cnpm来安装我们说需要的“依赖”。安装完成之后输入 cnpm -v,如下图,如果出现相应的版本号,则说明安装成功。
安装webpack,打开命令行工具输入:npm install webpack -g,安装完成之后输入 webpack -v,如下图,如果出现相应的版本号,则说明安装成功。
安装vue-cli脚手架构建工具,打开命令行工具输入:npm install vue-cli -g,安装完成之后输入 vue -V(注意这里是大写的“V”),如下图,如果出现相应的版本号,则说明安装成功。
二、通过以上四步,我们需要准备的环境和工具都准备好了,接下来就开始使用vue-cli来构建项目
在硬盘上找一个文件夹放工程用的。这里有两种方式指定到相关目录:①cd 目录路径 ②如果以安装git的,在相关目录右键选择Git Bash Here
安装vue脚手架输入:vue init webpack exprice ,注意这里的“exprice” 是项目的名称可以说是随便的起名,但是需要主要的是“不能用中文”。
$ vue init webpack exprice --------------------- 这个是那个安装vue脚手架的命令
This will install Vue 2.x version of the template. ---------------------这里说明将要创建一个vue 2.x版本的项目
For Vue 1.x use: vue init webpack#1.0 exprice
? Project name (exprice) ---------------------项目名称
? Project name exprice
? Project description (A Vue.js project) ---------------------项目描述
? Project description A Vue.js project
? Author Datura --------------------- 项目创建者
? Author Datura
? Vue build (Use arrow keys)
? Vue build standalone
? Install vue-router? (Y/n) --------------------- 是否安装Vue路由,也就是以后是spa(但页面应用需要的模块)
? Install vue-router? Yes
? Use ESLint to lint your code? (Y/n) n ---------------------是否启用eslint检测规则,这里个人建议选no
? Use ESLint to lint your code? No
? Setup unit tests with Karma + Mocha? (Y/n)
? Setup unit tests with Karma + Mocha? Yes
? Setup e2e tests with Nightwatch? (Y/n)
? Setup e2e tests with Nightwatch? Yes
vue-cli · Generated "exprice".
To get started: --------------------- 这里说明如何启动这个服务
cd exprice
npm install
npm run dev
如下图:
cd 命令进入创建的工程目录,首先cd exprice(这里是自己建工程的名字);
安装项目依赖:npm install,因为自动构建过程中已存在package.json文件,所以这里直接安装依赖就行。不要从国内镜像cnpm安装(会导致后面缺了很多依赖库),但是但是如果真的安装“个把”小时也没成功那就用:cnpm install 吧
安装 vue 路由模块 vue-router 和网络请求模块 vue-resource,输入:cnpm install vue-router vue-resource --save。
创建完成的“exprice”目录如下:
下面我简单的说明下各个目录都是干嘛的:
启动项目,输入:npm run dev。服务启动成功后浏览器会默认打开一个“欢迎页面”,如下图:
注意:这里是默认服务启动的是本地的8080端口,所以请确保你的8080端口不被别的程序所占用。
作者:datura_lj
链接:http://www.jianshu.com/p/1626b8643676
來源:简书
一、那么我们就从最简单的环境搭建开始:
安装node.js,从node.js官网下载并安装node,安装过程很简单,一路“下一步”就可以了(傻瓜式安装)。安装完成之后,打开命令行工具(win+r,然后输入cmd),输入 node -v,如下图,如果出现相应的版本号,则说明安装成功。
这里需要说明下,因为在官网下载安装node.js后,就已经自带npm(包管理工具)了,另需要注意的是npm的版本最好是3.x.x以上,以免对后续产生影响。
安装淘宝镜像,打开命令行工具,把这个(npm install -g cnpm --registry= https://registry.npm.taobao.org)复制(这里要手动复制就是用鼠标右键那个,具体为啥不多解释),安装这里是因为我们用的npm的服务器是外国,有的时候我们安装“依赖”的时候很很慢很慢超级慢,所以就用这个cnpm来安装我们说需要的“依赖”。安装完成之后输入 cnpm -v,如下图,如果出现相应的版本号,则说明安装成功。
安装webpack,打开命令行工具输入:npm install webpack -g,安装完成之后输入 webpack -v,如下图,如果出现相应的版本号,则说明安装成功。
安装vue-cli脚手架构建工具,打开命令行工具输入:npm install vue-cli -g,安装完成之后输入 vue -V(注意这里是大写的“V”),如下图,如果出现相应的版本号,则说明安装成功。
二、通过以上四步,我们需要准备的环境和工具都准备好了,接下来就开始使用vue-cli来构建项目
在硬盘上找一个文件夹放工程用的。这里有两种方式指定到相关目录:①cd 目录路径 ②如果以安装git的,在相关目录右键选择Git Bash Here
安装vue脚手架输入:vue init webpack exprice ,注意这里的“exprice” 是项目的名称可以说是随便的起名,但是需要主要的是“不能用中文”。
$ vue init webpack exprice --------------------- 这个是那个安装vue脚手架的命令
This will install Vue 2.x version of the template. ---------------------这里说明将要创建一个vue 2.x版本的项目
For Vue 1.x use: vue init webpack#1.0 exprice
? Project name (exprice) ---------------------项目名称
? Project name exprice
? Project description (A Vue.js project) ---------------------项目描述
? Project description A Vue.js project
? Author Datura --------------------- 项目创建者
? Author Datura
? Vue build (Use arrow keys)
? Vue build standalone
? Install vue-router? (Y/n) --------------------- 是否安装Vue路由,也就是以后是spa(但页面应用需要的模块)
? Install vue-router? Yes
? Use ESLint to lint your code? (Y/n) n ---------------------是否启用eslint检测规则,这里个人建议选no
? Use ESLint to lint your code? No
? Setup unit tests with Karma + Mocha? (Y/n)
? Setup unit tests with Karma + Mocha? Yes
? Setup e2e tests with Nightwatch? (Y/n)
? Setup e2e tests with Nightwatch? Yes
vue-cli · Generated "exprice".
To get started: --------------------- 这里说明如何启动这个服务
cd exprice
npm install
npm run dev
如下图:
cd 命令进入创建的工程目录,首先cd exprice(这里是自己建工程的名字);
安装项目依赖:npm install,因为自动构建过程中已存在package.json文件,所以这里直接安装依赖就行。不要从国内镜像cnpm安装(会导致后面缺了很多依赖库),但是但是如果真的安装“个把”小时也没成功那就用:cnpm install 吧
安装 vue 路由模块 vue-router 和网络请求模块 vue-resource,输入:cnpm install vue-router vue-resource --save。
创建完成的“exprice”目录如下:
下面我简单的说明下各个目录都是干嘛的:
启动项目,输入:npm run dev。服务启动成功后浏览器会默认打开一个“欢迎页面”,如下图:
注意:这里是默认服务启动的是本地的8080端口,所以请确保你的8080端口不被别的程序所占用。
作者:datura_lj
链接:http://www.jianshu.com/p/1626b8643676
來源:简书

关于mui.ajax的设置,以及php取不到data值的问题的方法
代码小白,好不容易做到ajax这一步,又遇到坑了。
找了n多网站,也参考了论坛里面的文章。
最开始完全按照官方的demo来,直接报失败,如下:
[LOG] : SyntaxError: JSON Parse error: Unrecognized token '<'
取消json格式限制后,发现这个'<'token错误是来源于php错误报告的html标签。报告内容就是$post['username']找不到username,也就是说:
我发送的data格式和php获取的格式不一致。
经过无数次的撞墙实验后,发现这样成功了:
mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
crossDomain: true,
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});
想想看既然data不认识,很可能header也不认识,
那就删掉header这一项吧,有这个header,怎么写怎么错 (不知道是我学艺不精,还是bug?)。然后写在php里:
<?php
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST,GET');
header('Access-Control-Allow-Credentials:true');
header("Content-Type: application/json;charset=utf-8");
//下面该怎么写怎么写
这样php就能读取到data并且 app能顺利的获取php的返回值了。
代码小白,好不容易做到ajax这一步,又遇到坑了。
找了n多网站,也参考了论坛里面的文章。
最开始完全按照官方的demo来,直接报失败,如下:
[LOG] : SyntaxError: JSON Parse error: Unrecognized token '<'
取消json格式限制后,发现这个'<'token错误是来源于php错误报告的html标签。报告内容就是$post['username']找不到username,也就是说:
我发送的data格式和php获取的格式不一致。
经过无数次的撞墙实验后,发现这样成功了:
mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
crossDomain: true,
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});
想想看既然data不认识,很可能header也不认识,
那就删掉header这一项吧,有这个header,怎么写怎么错 (不知道是我学艺不精,还是bug?)。然后写在php里:
<?php
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST,GET');
header('Access-Control-Allow-Credentials:true');
header("Content-Type: application/json;charset=utf-8");
//下面该怎么写怎么写
这样php就能读取到data并且 app能顺利的获取php的返回值了。
收起阅读 »
HBuilder编写代码中大量的词组都没有自动提示,比如 mysqli
今天第一次下载HBuilder代码编辑器发现,这么强大的编辑器连 mysql。。。这样的很基础的语句都无法自动提示出来,别的编辑器,只需要输入my 后面都提示出来了,是我设置不对吗? 但是 像echo这样的词组可以提示出来,输入ec就可以了
今天第一次下载HBuilder代码编辑器发现,这么强大的编辑器连 mysql。。。这样的很基础的语句都无法自动提示出来,别的编辑器,只需要输入my 后面都提示出来了,是我设置不对吗? 但是 像echo这样的词组可以提示出来,输入ec就可以了

jsHint详解
jshint是一个javaScript语法和风格的检查工具,但检查不出逻辑问题。
安装
一、在sublime text 中使用jshint插件步骤:
(注:在为Sublime Text编辑器安装Sublime-JSHint插件之前,要首先确保安装了node.js)
方法1:
1 Ctrl+Shift+P 呼出Sublime命令面板
2 键入install,并选择Package Control:Install Package
3 键入js gutter,并选择JSHint Gutter
方法2:
1 获取Sublime Text,可通过git命令。
git clone https://github.com/victorporof/Sublime-JSHint.git
2 打开 Sublime Text Package 文件夹。Preferences -> Browse Packages。
3 将步骤1中获取到的 Sublime-JSHint 文件夹移到 Packages 文件夹中。
4 重启 Sublime Text。
Sublime-JSHint使用
方法1:由菜单 Tools -> Command Palette(或快捷键 Ctrl+Shift+P)打开命令面板。键入 jshint 并选择 JSHint。
方法2:打开一 js 文件,并打开控制台(View -> Show Console),在控制台中键入 view.run_command("jshint")。
方法3:Ctrl+Shift+J(或者Mac使用Cmd+Shift+J)
方法4:右键选择JSHint
设置
"lint_on_edit": false,
// Configurable duration before re-linting.
"lint_on_edit_timeout": 5,
// Automatically lint when a file is loaded.
"lint_on_load": false,
// Automatically lint when a file is saved.
"lint_on_save": false,
// Highlight problematic regions when selected.
"highlight_selected_regions": false,
// Log the settings passed to JSHint from .jshintrc
.
"print_diagnostics": true
配置选项
"strict": true, //严格模式 参考文章(http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html)
"asi": true, //允许省略分号(写上这条,规避检查出很多警告 可以去掉)
"bitwise": true, //禁止使用位运算符,比如经常把&&写错& 规避此错误
"noarg": true, //禁止使用.caller 和 .callee (ECMS5已经禁用了此 可以去掉)
"eqeqeq": true, //禁止使用== 和 != 强制使用=== 和 !==
"undef": true, //禁止使用不在全局变量列表中的未定义变量
"curly": true, //循环或者条件语句必须使用花括号包住
"devel": true, //定义用于调试的全局变量:console,alert
"jquery": true, //定义全局暴露的jQuery库 (可以去掉)
"browser": true, //暴露浏览器属性的全局变量 如window document
"evil": true, //禁止使用eval (可以去掉)
"quotemark":true (商榷)
"globals": {"$":true,"require":true,"FastClick":true,"Swiper"},
编辑器 VS Gulp_jshint
1 个人偏向于在编辑器中使用jshint,这样不用在每个项目都配置,同时也能约束项目之外的编辑。
2 在编辑器中使用jshint 比在Gulp_jshint 的更实时,更清晰。jshint有错误,会在每一行有提示。而后者会在命令窗口提示,不方便。
3 Gulp_jshint 还需要进一步探查。
项目中一些问题
无法识别的一些问题:
1 //= require chartjs/chart.core (解决掉了)
2 封闭空间上面的(未解决);
3 引入插件的实例化:comRadar = new Chart(ctx).Radar()(解决掉了);
//配置参数
"globals": {"$":true,"require":true,"FastClick":true,"Swiper"},
4 var CardPopup = function(el, opts) {
this.el = el;
this.defaults = {};
this.options = $.extend({}, this.defaults, opts);
} (此处加封号)
CardPopup.prototype = {
init: function() {
var me = this,
el = me.el;
return me;
},
} (此处加封号)
$.fn.CardPopup = function(opts) {
var com;
} (此处加封号)
5 A && B
//要么写成 if(A) B
//或者 / jshint expr: true /
6 jshint 中希望 A.B 而不希望A[B]
7 / jshint ignore:start /
var optionTemplate = Hogan.compile('<ul class="items options clearfix count-{{count}}">\
{{#options}}\
<li class="item option {{#selected}}selected{{/selected}}">\
<div class="pie">\
<canvas class="canvas-outer" data-percent="{{value}}"></canvas>\
<div class="num">{{value}}%</div>\
</div>\
<p class="text">{{text}}</p>\
</li>\
{{/options}}\
</ul>');
/ jshint ignore:end /
8 /jshint scripturl:true/
data.top[i].redirect_url = data.top[i].redirect_url || 'javascript:void(0);';
9 $(subscribeData).each(function(index, element) {
if (element == specialColumnId) {
elSubscribe.removeClass('icon-jiadingyue').addClass('icon-yidingyue');
}
}) (是否加)
10
/jshint -W018 /
if (!!elForm.find('[name="comment[parent_id]"]').val() == true) {
isReplyComment = true;
}
日记本
來源:http://www.jianshu.com/p/9c26c61da146
jshint是一个javaScript语法和风格的检查工具,但检查不出逻辑问题。
安装
一、在sublime text 中使用jshint插件步骤:
(注:在为Sublime Text编辑器安装Sublime-JSHint插件之前,要首先确保安装了node.js)
方法1:
1 Ctrl+Shift+P 呼出Sublime命令面板
2 键入install,并选择Package Control:Install Package
3 键入js gutter,并选择JSHint Gutter
方法2:
1 获取Sublime Text,可通过git命令。
git clone https://github.com/victorporof/Sublime-JSHint.git
2 打开 Sublime Text Package 文件夹。Preferences -> Browse Packages。
3 将步骤1中获取到的 Sublime-JSHint 文件夹移到 Packages 文件夹中。
4 重启 Sublime Text。
Sublime-JSHint使用
方法1:由菜单 Tools -> Command Palette(或快捷键 Ctrl+Shift+P)打开命令面板。键入 jshint 并选择 JSHint。
方法2:打开一 js 文件,并打开控制台(View -> Show Console),在控制台中键入 view.run_command("jshint")。
方法3:Ctrl+Shift+J(或者Mac使用Cmd+Shift+J)
方法4:右键选择JSHint
设置
"lint_on_edit": false,
// Configurable duration before re-linting.
"lint_on_edit_timeout": 5,
// Automatically lint when a file is loaded.
"lint_on_load": false,
// Automatically lint when a file is saved.
"lint_on_save": false,
// Highlight problematic regions when selected.
"highlight_selected_regions": false,
// Log the settings passed to JSHint from .jshintrc
.
"print_diagnostics": true
配置选项
"strict": true, //严格模式 参考文章(http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html)
"asi": true, //允许省略分号(写上这条,规避检查出很多警告 可以去掉)
"bitwise": true, //禁止使用位运算符,比如经常把&&写错& 规避此错误
"noarg": true, //禁止使用.caller 和 .callee (ECMS5已经禁用了此 可以去掉)
"eqeqeq": true, //禁止使用== 和 != 强制使用=== 和 !==
"undef": true, //禁止使用不在全局变量列表中的未定义变量
"curly": true, //循环或者条件语句必须使用花括号包住
"devel": true, //定义用于调试的全局变量:console,alert
"jquery": true, //定义全局暴露的jQuery库 (可以去掉)
"browser": true, //暴露浏览器属性的全局变量 如window document
"evil": true, //禁止使用eval (可以去掉)
"quotemark":true (商榷)
"globals": {"$":true,"require":true,"FastClick":true,"Swiper"},
编辑器 VS Gulp_jshint
1 个人偏向于在编辑器中使用jshint,这样不用在每个项目都配置,同时也能约束项目之外的编辑。
2 在编辑器中使用jshint 比在Gulp_jshint 的更实时,更清晰。jshint有错误,会在每一行有提示。而后者会在命令窗口提示,不方便。
3 Gulp_jshint 还需要进一步探查。
项目中一些问题
无法识别的一些问题:
1 //= require chartjs/chart.core (解决掉了)
2 封闭空间上面的(未解决);
3 引入插件的实例化:comRadar = new Chart(ctx).Radar()(解决掉了);
//配置参数
"globals": {"$":true,"require":true,"FastClick":true,"Swiper"},
4 var CardPopup = function(el, opts) {
this.el = el;
this.defaults = {};
this.options = $.extend({}, this.defaults, opts);
} (此处加封号)
CardPopup.prototype = {
init: function() {
var me = this,
el = me.el;
return me;
},
} (此处加封号)
$.fn.CardPopup = function(opts) {
var com;
} (此处加封号)
5 A && B
//要么写成 if(A) B
//或者 / jshint expr: true /
6 jshint 中希望 A.B 而不希望A[B]
7 / jshint ignore:start /
var optionTemplate = Hogan.compile('<ul class="items options clearfix count-{{count}}">\
{{#options}}\
<li class="item option {{#selected}}selected{{/selected}}">\
<div class="pie">\
<canvas class="canvas-outer" data-percent="{{value}}"></canvas>\
<div class="num">{{value}}%</div>\
</div>\
<p class="text">{{text}}</p>\
</li>\
{{/options}}\
</ul>');
/ jshint ignore:end /
8 /jshint scripturl:true/
data.top[i].redirect_url = data.top[i].redirect_url || 'javascript:void(0);';
9 $(subscribeData).each(function(index, element) {
if (element == specialColumnId) {
elSubscribe.removeClass('icon-jiadingyue').addClass('icon-yidingyue');
}
}) (是否加)
10
/jshint -W018 /
if (!!elForm.find('[name="comment[parent_id]"]').val() == true) {
isReplyComment = true;
}
日记本
來源:http://www.jianshu.com/p/9c26c61da146
收起阅读 »
怎么解决tomcat占用8080端口问题图文教程
怎么解决tomcat占用8080端口问题
相信很多朋友都遇到过这样的问题吧,tomcat死机了,重启eclipse之后,发现
Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.The server may already be
running in another process, or a system process may be using the port. To start this server you will need to stop the other
process or change the port number(s).
是不是很多人教你重启电脑呢,下面教大家一个不用重启计算机 的方法。
此方法也可以解决,windows上如何结束进程的详细过程,下面附详细,图文说明
在dos下,输入 netstat -ano|findstr 8080
//说明:查看占用8080端口的进程
显示占用端口的进程
taskkill /pid 6856 /f
//说明,运行windows自带taskkill命令,将上面显示的进程号,结束掉。
下面有图为证
怎么解决tomcat占用8080端口问题图文教程,到此结束,希望对大家有所帮助。祝大家,工作愉快,
不用重启计算机了,次方法也可以解决其他类似问题,在编程当中对大家的困扰。
怎么解决tomcat占用8080端口问题
相信很多朋友都遇到过这样的问题吧,tomcat死机了,重启eclipse之后,发现
Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.The server may already be
running in another process, or a system process may be using the port. To start this server you will need to stop the other
process or change the port number(s).
是不是很多人教你重启电脑呢,下面教大家一个不用重启计算机 的方法。
此方法也可以解决,windows上如何结束进程的详细过程,下面附详细,图文说明
在dos下,输入 netstat -ano|findstr 8080
//说明:查看占用8080端口的进程
显示占用端口的进程
taskkill /pid 6856 /f
//说明,运行windows自带taskkill命令,将上面显示的进程号,结束掉。
下面有图为证
怎么解决tomcat占用8080端口问题图文教程,到此结束,希望对大家有所帮助。祝大家,工作愉快,
不用重启计算机了,次方法也可以解决其他类似问题,在编程当中对大家的困扰。

详解做沉浸式状态栏遇到的坑
因为项目首页顶部是一张图片,不做沉浸式实在难看,搜索很多资料,最终解决。
本来打算只在首页用沉浸式,可惜查阅资料后不能单独设置,因为这个是系统(还是应用)级别的
下面说下如何做沉浸式:
1:
开启沉浸式状态栏
manifest.json->plus节点下
"statusbar": {
"immersed": true //开启沉浸式状态栏
}
开启后页面header会顶到系统状态栏,导致页首标题非常难看,所以要做第二步
2:
引入 HelloH5应用中的“js/immersed.js”
如果用官方提供的例子,需要自己手动在每个页面添加两个ID
示例:
<header class="mui-bar mui-bar-nav nav-bg" id="header">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">团队报表</h1>
</header>
<div class="mui-content" id="content">
</div>
我根据需求把官方的immersed.js 简单修改了下
示例:
(function(w){
document.addEventListener('plusready',function(){
},false);
var immersed = 0;
var ms=(/Html5Plus\/.+\s(.(Immersed\/(\d+.?\d).*))/gi).exec(navigator.userAgent);
if(ms&&ms.length>=3){//如果支持沉浸式
immersed=parseInt(ms[2]);//系统状态栏高度
}
w.immersed=immersed;
if(!immersed){
return;//如果不支持则返回,不执行下面操作
}
var t=document.getElementById('header');//获得头部标签
t&&(t.style.paddingTop=immersed+'px',t.style.height=t.offsetHeight+immersed+'px');//改变头部的内边距,以及改变头部的高度
t=document.getElementById('content');//获得主体标签
t&&(t.style.marginTop=immersed+'px');//调整主体距离header的外边距(如果只改变头部不执行这行代码会遮盖主体内容)
})(window);
如果需要看官方原版的js 可以查找HelloH5+应用中的“js/immersed.js”
一般来说用我提供的js足矣,如果还有特殊的需求自己dry
总结:第一步 main.json里开启沉浸式 第二步 在错位的页面,引入js 并且设置两个ID即可
本人才疏学浅,初入hbuilder,内容格式编辑的不好,或许还有更好的方案,将就看吧。。
附官方帖子内容:
http://ask.dcloud.net.cn/article/422 如何动态兼容沉浸式应用
http://ask.dcloud.net.cn/article/12622 html5plus应用实现沉浸式状态栏
最后闲话两句:鄙视一下那些在论坛提出问题,最后解决了之后只回复一句解决了,评论底部坛友也遇到同样的问题,在问楼主怎么解决的就没回复了,真心觉得这种人多了,论坛气氛很差。
因为项目首页顶部是一张图片,不做沉浸式实在难看,搜索很多资料,最终解决。
本来打算只在首页用沉浸式,可惜查阅资料后不能单独设置,因为这个是系统(还是应用)级别的
下面说下如何做沉浸式:
1:
开启沉浸式状态栏
manifest.json->plus节点下
"statusbar": {
"immersed": true //开启沉浸式状态栏
}
开启后页面header会顶到系统状态栏,导致页首标题非常难看,所以要做第二步
2:
引入 HelloH5应用中的“js/immersed.js”
如果用官方提供的例子,需要自己手动在每个页面添加两个ID
示例:
<header class="mui-bar mui-bar-nav nav-bg" id="header">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">团队报表</h1>
</header>
<div class="mui-content" id="content">
</div>
我根据需求把官方的immersed.js 简单修改了下
示例:
(function(w){
document.addEventListener('plusready',function(){
},false);
var immersed = 0;
var ms=(/Html5Plus\/.+\s(.(Immersed\/(\d+.?\d).*))/gi).exec(navigator.userAgent);
if(ms&&ms.length>=3){//如果支持沉浸式
immersed=parseInt(ms[2]);//系统状态栏高度
}
w.immersed=immersed;
if(!immersed){
return;//如果不支持则返回,不执行下面操作
}
var t=document.getElementById('header');//获得头部标签
t&&(t.style.paddingTop=immersed+'px',t.style.height=t.offsetHeight+immersed+'px');//改变头部的内边距,以及改变头部的高度
t=document.getElementById('content');//获得主体标签
t&&(t.style.marginTop=immersed+'px');//调整主体距离header的外边距(如果只改变头部不执行这行代码会遮盖主体内容)
})(window);
如果需要看官方原版的js 可以查找HelloH5+应用中的“js/immersed.js”
一般来说用我提供的js足矣,如果还有特殊的需求自己dry
总结:第一步 main.json里开启沉浸式 第二步 在错位的页面,引入js 并且设置两个ID即可
本人才疏学浅,初入hbuilder,内容格式编辑的不好,或许还有更好的方案,将就看吧。。
附官方帖子内容:
http://ask.dcloud.net.cn/article/422 如何动态兼容沉浸式应用
http://ask.dcloud.net.cn/article/12622 html5plus应用实现沉浸式状态栏
最后闲话两句:鄙视一下那些在论坛提出问题,最后解决了之后只回复一句解决了,评论底部坛友也遇到同样的问题,在问楼主怎么解决的就没回复了,真心觉得这种人多了,论坛气氛很差。
收起阅读 »
iOS 上传App Store 报 ITMS-90096错误处理方法
近期有用户在使用云打包上传appstore时,apploader会报如下错误,
ERROR ITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone apps and app updates submitted must support the 4-inch display on iPhone 5 and must include a launch image referenced in the Info.plist under UILaunchImages with a UILaunchImageSize value set to {320, 568}. Launch images must be PNG files and located at the top-level of your bundle, or provided within each .lproj folder if you localize your launch images. Learn more about iPhone 5 support and app launch images by reviewing the 'iOS Human Interface Guidelines' at https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen
解决方法如下,
请根据HBuilder里manifest.json的启动图片设置页面里提示的尺寸重设应用的启动图片,
注意
1 请严格按照提示的尺寸设置需要支持设备的启动图片
2 图片必须是png格式,其他格式图片修改后缀名也会报错
近期有用户在使用云打包上传appstore时,apploader会报如下错误,
ERROR ITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone apps and app updates submitted must support the 4-inch display on iPhone 5 and must include a launch image referenced in the Info.plist under UILaunchImages with a UILaunchImageSize value set to {320, 568}. Launch images must be PNG files and located at the top-level of your bundle, or provided within each .lproj folder if you localize your launch images. Learn more about iPhone 5 support and app launch images by reviewing the 'iOS Human Interface Guidelines' at https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen
解决方法如下,
请根据HBuilder里manifest.json的启动图片设置页面里提示的尺寸重设应用的启动图片,
注意
1 请严格按照提示的尺寸设置需要支持设备的启动图片
2 图片必须是png格式,其他格式图片修改后缀名也会报错

完美解决ios网络音频播放问题,解决音频自动播放问题,解决网络音频自动播放问题
潘顺昌 2017-12-13
```javascript
受到ios中的提示
iOS - 4.3+ (支持): 支持"aac"、"aiff"、"mp3"、"mid"、"wav"、"amr"等格式文件。 暂不支持播放网络路径音频。
那么就是说播放本地视频是可以的,因此只要把音频下载到ios不就行了么?哈哈,微信里不是很多文件都保存在本地么,说干就干
代码如下:
```javascript
/**
* 下载mp3文件到本地
* @mp3Id id
* @loadUrl 网络路径
* @relativePath 自己存储的相对路径
*/
function downloadMp3toLocalByUrl(mp3Id,loadUrl,relativePath)
{
/*联网下载mp3*/
//创建下载任务
var dtask = plus.downloader.createDownload(loadUrl, {}, function(d, status) {
if (status == 200) {
//下载成功并播放音频
console.log("下载成功");
var mp3src = getImgFromLocal(mp3Id, d.filename);
if ( plus.audio == undefined ) {
mui.toast( "音频播放器加载失败." );
}
console.log("mp3 download dir="+mp3src+",mp3="+d.filename);
p = plus.audio.createPlayer(d.filename);
p.play( function () {
p.stop();//播放完停止
console.log( "Audio play success!" );
}, function ( e ) {
console.log( "Audio play error: " + e.message );
} );
}
else
{
//下载失败,需删除本地临时文件,否则下次进来时会检查到图片已存在
console.log("下载失败status=" + status+"=="+relativePath);
//dtask.abort();//文档描述:取消下载,删除临时文件;(但经测试临时文件没有删除,故使用delFile()方法删除);
if (relativePath!=null)
{
delFile(relativePath);
}
}
});
//启动下载任务
dtask.start();
}
/*删除指定文件*/
function delFile(relativePath) {
plus.io.resolveLocalFileSystemURL(relativePath, function(entry) {
entry.remove(function(entry) {
console.log("文件删除成功==" + relativePath);
}, function(e) {
console.log("文件删除失败=" + relativePath);
});
});
}
/*获取本地mp3文件最终路径完整地址
* mp3Id mp3文件id
* relativePath 本地相对路径 例如:"_downloads/demo.mp3"
*/
function getImgFromLocal(mp3Id, relativePath) {
//本地相对路径("_downloads/logo.jpg")转成SD卡绝对路径("/storage/emulated/0/Android/data/io.dcloud.HBuilder/.HBuilder/downloads/logo.jpg");
var sd_path = plus.io.convertLocalFileSystemURL(relativePath);
//返回路径全地址
return sd_path;
}
测试代码如下:
startPlay("http://bos.nj.bpc.baidu.com/v1/developer/73bbf22c-7511-4e87-bdc8-d8d0b5b0c47e.mp3");
潘顺昌 2017-12-13
```javascript
受到ios中的提示
iOS - 4.3+ (支持): 支持"aac"、"aiff"、"mp3"、"mid"、"wav"、"amr"等格式文件。 暂不支持播放网络路径音频。
那么就是说播放本地视频是可以的,因此只要把音频下载到ios不就行了么?哈哈,微信里不是很多文件都保存在本地么,说干就干
代码如下:
```javascript
/**
* 下载mp3文件到本地
* @mp3Id id
* @loadUrl 网络路径
* @relativePath 自己存储的相对路径
*/
function downloadMp3toLocalByUrl(mp3Id,loadUrl,relativePath)
{
/*联网下载mp3*/
//创建下载任务
var dtask = plus.downloader.createDownload(loadUrl, {}, function(d, status) {
if (status == 200) {
//下载成功并播放音频
console.log("下载成功");
var mp3src = getImgFromLocal(mp3Id, d.filename);
if ( plus.audio == undefined ) {
mui.toast( "音频播放器加载失败." );
}
console.log("mp3 download dir="+mp3src+",mp3="+d.filename);
p = plus.audio.createPlayer(d.filename);
p.play( function () {
p.stop();//播放完停止
console.log( "Audio play success!" );
}, function ( e ) {
console.log( "Audio play error: " + e.message );
} );
}
else
{
//下载失败,需删除本地临时文件,否则下次进来时会检查到图片已存在
console.log("下载失败status=" + status+"=="+relativePath);
//dtask.abort();//文档描述:取消下载,删除临时文件;(但经测试临时文件没有删除,故使用delFile()方法删除);
if (relativePath!=null)
{
delFile(relativePath);
}
}
});
//启动下载任务
dtask.start();
}
/*删除指定文件*/
function delFile(relativePath) {
plus.io.resolveLocalFileSystemURL(relativePath, function(entry) {
entry.remove(function(entry) {
console.log("文件删除成功==" + relativePath);
}, function(e) {
console.log("文件删除失败=" + relativePath);
});
});
}
/*获取本地mp3文件最终路径完整地址
* mp3Id mp3文件id
* relativePath 本地相对路径 例如:"_downloads/demo.mp3"
*/
function getImgFromLocal(mp3Id, relativePath) {
//本地相对路径("_downloads/logo.jpg")转成SD卡绝对路径("/storage/emulated/0/Android/data/io.dcloud.HBuilder/.HBuilder/downloads/logo.jpg");
var sd_path = plus.io.convertLocalFileSystemURL(relativePath);
//返回路径全地址
return sd_path;
}
测试代码如下:
startPlay("http://bos.nj.bpc.baidu.com/v1/developer/73bbf22c-7511-4e87-bdc8-d8d0b5b0c47e.mp3");