小程序的坑感觉一大堆,有些是js的问题,有些则是wx本身封装的问题,感觉确实挺坑的,自从研究小程序以来,感觉坑不少,这里记录一下吧,算是一个里程碑帖子
一、小程序之map之殇
在这里主要说明一下,在做了一个地图相关的小程序的时候,本来在控制台预览的时候,妥妥的啊,然后准备收工的时候,运行了下手机,我日~竟然只有地图其他的毛都没有~~~ 如图
这个是在预览模拟器的时候出现的图,but,在command+shift+P(编译并预览)的时候
诡异的事情出来了,
这个真的是从手机上截的图!
后来认真看了小程序的介绍之后发现map的层级最高,基本上所有的控件都不能比地图高,小程序提供了两个控件可以比地图高(cover-view、cover-image)我擦,真的让人很蛋疼,竟然是这样的,好吧,好多东西要重新写一下了
各位同学,map真的要小心,本来是想把app的功能搬到小程序上的,发现限制还是比较多的,注意下
二、小程序模仿java写两个常用的组件
我这里要说的其实很简单,别说原理,因为java原理怎么来解释js原理?!我这里就是提供一个可以用的封装,反正可以这么用,问原理的找老师吧,反正我自己不会
//这个是HashMap的写法
function HashMap(){
//定义长度
var length = 0;
//创建一个对象
var obj = new Object();
/**
* 判断Map是否为空
*/
this.isEmpty = function(){
return length == 0;
};
/**
* 判断对象中是否包含给定Key
*/
this.containsKey=function(key){
return (key in obj);
};
/**
* 判断对象中是否包含给定的Value
*/
this.containsValue=function(value){
for(var key in obj){
if(obj[key] == value){
return true;
}
}
return false;
};
/**
*向map中添加数据
*/
this.put=function(key,value){
if(!this.containsKey(key)){
length++;
}
obj[key] = value;
};
/**
* 根据给定的Key获得Value
*/
this.get=function(key){
return this.containsKey(key)?obj[key]:null;
};
/**
* 根据给定的Key删除一个值
*/
this.remove=function(key){
if(this.containsKey(key)&&(delete obj[key])){
length--;
}
};
/**
* 获得Map中的所有Value
*/
this.values=function(){
var _values= new Array();
for(var key in obj){
_values.push(obj[key]);
}
return _values;
};
/**
* 获得Map中的所有Key
*/
this.keySet=function(){
var _keys = new Array();
for(var key in obj){
_keys.push(key);
}
return _keys;
};
/**
* 获得Map的长度
*/
this.size = function(){
return length;
};
/**
* 清空Map
*/
this.clear = function(){
length = 0;
obj = new Object();
};
}
好吧,好吧,我把示例也写出来
//for example
var map = new HashMap();
map.put("key","Value1");
map.size()
map.get("key"));
map.remove("key");
map.put("key","newValue");
var values = map.values();
for(var i in values){
values[i]
}
var keySet = map.keySet();
for(var i in keySet){
keySet[i]
}
再来一个啊,这次来个arraylist
//纯粹就是一个普普通通够你一般用途的arraylist
function ArrayList() {
this.arr = [],
this.size = function () {
return this.arr.length;
},
this.add = function () {
if (arguments.length == 1) {
this.arr.push(arguments[0]);
} else if (arguments.length >= 2) {
var deleteItem = this.arr[arguments[0]];
this.arr.splice(arguments[0], 1, arguments[1], deleteItem)
}
return this;
},
this.get = function (index) {
return this.arr[index];
},
this.removeIndex = function (index) {
this.arr.splice(index, 1);
},
this.removeObj = function (obj) {
this.removeIndex(this.indexOf(obj));
},
this.indexOf = function (obj) {
for (var i = 0; i < this.arr.length; i++) {
if (this.arr[i] === obj) {
return i;
};
}
return -1;
},
this.isEmpty = function () {
return this.arr.length == 0;
},
this.clear = function () {
this.arr = [];
},
this.contains = function (obj) {
return this.indexOf(obj) != -1;
}
};
好吧,也来个示例给你看看
//for example
//新建一个List
var list=new ArrayList();
//增加一个元素
list.add("甲").add("乙").add("丙").add("丁");
//增加指定位置
list.add(3,"akjsdfljasdlkfja");
//删除指定元素
list.removeObj("3");
//删除指定位置元素
list.removeIndex(0);
其实这些不完全是我写的,就是参考了一大堆吧,纯粹是站在了kami的肩膀上吧