Party_bid 第二张卡中的一个难点就是活动报名短信的接收、自动回复以及处理,其他的一些知识点的使用也都是为这个功能而服务的。接下来就我在做第二张卡时遇到的几个问题以及重要的知识点做一下总结。
1、对接收的短信的格式进行判断处理
第二张卡的要求是报名格式“bm+姓名”,其中“bm”不区分大小写,且“bm”前后可以有空格。
思路:
首先要对发来的字符串进行去空格,这里用到的一个新的方法就是使用正则表达式的replace和search。
var message = json_message.messages[0].message.replace(/\s/g, ""); var b=message.search(/bm/i);
1) replace函数有两个参数,第一个是被替换的元素,第二个是替换元素。\ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。\s匹配任何空白字符,包括空格、制表符、换页符等等,/g代表全局匹配,该行代码的意思是用空来代替空格即去空格。这样message就是不含空格的字符串,现在就只需要检查是否符合bm开头了。
2)search函数
search返回与正则表达式查找内容匹配的第一个子字符串的位置。search 方法指明是否存在相应的匹配。如果找到一个匹配,search方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1 。“/bm/i”为正则表达式,i是模式匹配符,ignorCase忽略大小写,放在正则表达式的最后,当参数使用。第二句代码的意思是查找message字符串,看是否匹配“bm”,且不区分大小写。
search的使用例子如下:
"shdkjkk".search(/dk/i) //这个语句在shdkjkk中匹配,返回值为2 "bm".search(/bm/i) //这个语句的返回值为0 "gfBmty".search(/bm/i) //这个语句的返回值为2 "bdrtm".search(/bm/i) //这个语句的返回值为-1 ,表示不匹配2、接收短信后页面及时刷新
1)事件触发刷新
我在进行这块时并没有想到及时的刷新,导致报名信息不能呈现在列表中。
页面的刷新要有触发者和执行者,触发刷新的事件就是收到短信,这块在sms中写。将sms和html关联起来的就是html的id
<div id="register"></div> //定义页面的id
sms中触发事件的代码:
//获得报名id刷新报名页面 var register = document.getElementById("register"); //获取报名页面的id if (register) { var scope = angular.element(register).scope(); //通过id找到对应的页面获取$scope scope.$apply(function () { //使用$apply()将报名页面的refresh方法包起来调用 scope.refresh(); }); }
我们的refresh方法在相应的js文件里面写。
2)时间触发刷新
还有一个就是按时间进行刷新。setTimeout只执行一次,而setInterval在执行完代码后,固定的时间后还会再执行。
setTimeout(code,millisec)
code (必需):是要调用的函数后要执行的 JavaScript 代码串。millisec(必需):在执行代码前需等待的毫秒数。
varmsg='1shaspassed!'; setTimeout(function(){ alert(msg); },1000); //第一个参数传递了一个会调用所需语句的function对象,这样就解决了code带参的问题。
3、正在进行的活动底色为黄色
首先自己定义一个css颜色样式
.status{
background-color: #ffff00 ;
}
然后在对应的html中,定义一个变量类,使用对象绑定,并使activity.status成为存储中的一个元素
<li ng-repeat="activity in activities" class="{{activity.status}}" ng-click="activity_register(activity.name)">
只需在对应的JS文件中对存储的status元素进行赋值存储然后提取即可。
4、点击结束弹出二次提醒对话框
event.returnValue = confirm("确认要结束本次报名吗?"); if (event.returnValue) { //你的处理内容 }
confirm里填写提醒内容,返回为true和false,然后再进行处理。