dorado事件
//----------------------------------------------------------------------------//
//校验实体数据是否填写
if(entity.validate()!="ok"){
return;
}
//----------------------------------------------------------------------------//
/**
*在鼠标失去焦点候将填写的小写字母转换为大写字母
*/
//@Bind #pcode.onBlur
!function(self, arg){
var str = view.get("#dsMain").getData("#.pcode");
var uperStr = str.toUpperCase();
view.get("#dsMain").getData("#").set("pcode", uperStr);
//如果有长度限制则自动截取前面一个
var str = view.get("#dsQueryCriteria").getData("#.qu");
if(str != null){
var uperStr = str.substring(0,1).toUpperCase();
view.get("#dsQueryCriteria").getData("#").set("qu", uperStr);
}
};
//----------------------------------------------------------------------------//
//校验数据时使用自定义校验
if ('' != arg.data) {
//判断座机格式的
var partten = /^(\d{3,4}\-)?\d{7,8}$/i; //座机格式是 010-98909899
//var partten = /^0(([1-9]\d)|([3-9]\d{2}))\d{8}$/; 没有中间那段 -的 座机格式是 01098909899
var zuoji=partten.test(arg.data);
//判断手机格式可以用
var re = /^(\\+86)?(1[0-9]{10})$/;
var shouji=re.test(arg.data);
if(zuoji || shouji){
//throw new dorado.Exception("输入联系方式正确");
}else{
throw new dorado.Exception("你输入的电话号码有误!")
return;
}
}
//----------------------------------------------------------------------------//
/**
* DATATYPE数据改变时触发事件
*/
//@Bind @VT04ProductM.onDataChange
!function(self, arg){
//将小写转换为大写
// var str = view.get("#dsMain").getData("#.pcode");
// var uperStr = str.toUpperCase();
// view.get("#dsMain").getData("#").set("pcode", uperStr);
if (arg.property == "pcode") {
if (arg.oldValue != arg.newValue) {
view.get("#isExistPcode").set("parameter",arg.newValue);
console.log(arg.oldValue,"旧值");
console.log(arg.newValue,"新值");
view.get("#isExistPcode").execute(function(message){
if (null != message) {
dorado.MessageBox.alert(message);
if(null == arg.oldValue || '' == arg.oldValue || undefined == arg.oldValue){
view.get("#dsMain").getData("#").set("pcode", '');
return;
}else{
view.get("#dsMain").getData("#").set("pcode", arg.oldValue);
return;
}
}
});
}
}
};
//----------------------------------------------------------------------------//
/**
* DATATYPE数据改变时触发事件
*/
//@Bind @VT04Color.onDataChange
!function(self, arg){
if (arg.property == "colorcode") {
alert(arg.oldValue);
if (arg.oldValue != arg.newValue && undefined != arg.oldValue) {
view.get("#isModify").set("parameter",arg.oldValue);
//判断修改时颜色编码在系统中是否已使用(已使用则不允许修改)
view.get("#isModify").execute(function(message){
if (null != message) {
dorado.MessageBox.alert(message);
if(null == arg.oldValue || '' == arg.oldValue || undefined == arg.oldValue){
view.get("#dsMain").getData("#").cancel();
}else{
view.get("#dsMain").getData("#").cancel();
}
}
});
}
}
};
//----------------------------------------------------------------------------//
//弹出dialog
//@Bind #btnAdd.onClick
!function(self, arg) {
view.get("#dsMain").insert();
view.get("#dlgMainAdd").show();
};
//----------------------------------------------------------------------------//
/**
* DataGrid中的触发器传值
*/
//@Bind #dsddUser2.onValueSelect
!function(self, arg) {
var employeeid = view.get("#dsUser").getData("#").get("EMPLOYEEID");
view.get("#dsMain").getData("#").set({
"userid" : employeeid
});
};
//----------------------------------------------------------------------------//
/**
* 以下是页面基本的事件
*/
// @Bind #dsQueryCriteria.onReady
!function(self, arg) {
view.get("#dsQueryCriteria").insert();
};
// @Bind #btnQuery.onClick
!function(self, arg) {
var queryParm = view.get("#dsQueryCriteria").getData("#");
view.get("#dsMain").set("parameter", queryParm).flushAsync();
};
//@Bind #btnReset.onClick
!function(self, arg) {
view.get("#dsQueryCriteria").getData("#").cancel();
view.get("#dsQueryCriteria").fireEvent("onReady");
};
//----------------------------------------------------------------------------//
//控制工具栏按钮的可用性
function enableTlbBtn(propType, a, b,c,d,e) {
view.id('btnOrderConfirm').set(propType, a);
view.id('btnYgbPre').set(propType, b);
view.id('btnYgbConfirm').set(propType, c);
view.id('btnSybApprove').set(propType, d);
view.id('btnSybReject').set(propType, e);
}
//@Bind view.onReady
!function(self, arg){
var pageFlag = '${param.flag}';
if (pageFlag == null || pageFlag == '') {
enableTlbBtn("visible",false,false,true,false,false);
}else if(pageFlag == 1){
enableTlbBtn("visible",false,true,false,false,false);
}else if(pageFlag == 2){
enableTlbBtn("visible",false,false,true,false,false);
}else if(pageFlag == 3){
enableTlbBtn("visible",false,false,false,true,true);
}else if(pageFlag == 4){
enableTlbBtn("visible",false,false,false,false,false);
}else if(pageFlag == 5){
enableTlbBtn("visible",false,false,false,false,false);
}
};
//----------------------------------------------------------------------------//
强大的&&和||表达式
你可能在JavaScript库和JavaScript框架中已经见过它们了, 那么我们先由几个基本的例子开始:
Example 1:|| (或)
设置默认值,通常用:
function setKey(value){
if(!value){
value = "Default Value";
}
}
用这个代替:
function setKey(value){
value = value || "Default Value";
}
!提示: JavaScript判断为假的值: null,false,0, undefined, NaN 和 ""(空字符串).
记住像Infinity(无限大)这种 Number(感谢@xyzhanjiang 的指正) 的值是被判断为真不是假.
而NaN则被判断为假. 除了以上这些, 其他值全部被判断为真.
解析:
- || 操作符首先从左开始判断表达式的真假, 如果为真, 马上返回左边表达式返回的值;
如果左边表达式被判断为假, 则继续判断右边的表达式, 并返回右边表达式的值.
- 如果value被判断为假, 会返回右边表达式的值.
换句话说, 如果value变量被判断为真, 则返回value的值.
//----------------------------------------------------------------------------//
Example 2:&&(并)
不要这么做:
function isAdult(age){
if(age && age > 17){
return true;
}else{
return false;
}
}
用这个代替:
function isAdult(age){
return age && age > 17;
}
解析:
- && 操作符从左开始判断表达式, 如果左边的表达式被判断为假,
则返回false(!注:如果左边表达式的值为0时,则返回0感谢@飞天鼠 的指正), 不管右边的表达式是否为真.
- 如果左边的表达式为真, 则继续判断右边的表达式, 然后返回右边表达式结果
//----------------------------------------------------------------------------//
Dorado数据校验器--正则表达式
表达式
说明
/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)/g
IP
/^(\\+86)?(1[0-9]{10})$/
手机
[\u4e00-\u9fa5]
中文
\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*
邮件
^[-]?[0-9]+[\\.]?[0-9]+$
数字
http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?
网址
//----------------------------------------------------------------------------//
/**
* 保存按钮
*/
//@Bind #btnSaveAdd.onClick
!function(self, arg) {
// if(entity.validate() != "ok"){
// return;
// }
var entity = view.get("#dsMain").getData("#");
//判断修改时车辆型号在车籍表中是否存在和该车辆型号是否已维护价格
if (2 == entity.state) {
alert(entity.get("hidepcode"));
if(entity.get("hidepcode") != entity.get("pcode")){
var hidePcode = entity.get("hidepcode");
view.get("#isModify").set("parameter",hidePcode);
view.get("#isModify").execute(function(message) {
if(null != message){
dorado.MessageBox.alert(message);
return ;
}
});
}
}
};
//@Bind #isModify.onSuccess
!function(self, arg){
if(null == arg.result){
view.get("#updateSave").execute(function(message) {
if(message == '执行成功!'){
dorado.MessageBox.alert(message);
view.get("#dlgMainAdd").hide();
view.get("#dsMain").flushAsync();
}else{
if('新增时车辆型号在系统中重复!' == message){
view.get("#dsMain").getData("#").setState(1);
dorado.MessageBox.alert("车辆型号在系统中存在重复!");
}else if('修改时时车辆型号在系统中重复!' == message){
dorado.MessageBox.alert(message);
}else{
dorado.MessageBox.alert(message);
}
}
});
}
};
//----------------------------------------------------------------------------//
/**
* 仓库文本框的回车事件(回车后根据数据编码查询)
*/
//@Bind #sourceck.onKeyDown
!function(self, arg){
if(arg.keyCode == '13'){
console.log("selfValue",self.get("value"));
if(null != self.get("value") && '' != self.get("value")){
view.get("#queryCk").set("parameter", self.get("value")).execute(function(listMap) {
if(listMap.length == 1){
var ckname = listMap[0].NAME;
view.get("#dsQueryCriteria").getData("#").set({
"ckname" : ckname
});
}else{
dorado.MessageBox.alert("仓库编码无效,请重新输入!");
}
});
}else{
dorado.MessageBox.alert("仓库编码无效,请重新输入!");
}
}
};
//----------------------------------------------------------------------------//
创建dom
var s = new dorado.widget.Dialog({
id: "dlgMsg",
caption: " 提示", // 定义标题
width: "350",
height: "150",
"modal": false,
center: true,
icon: "url(>skin>common/icons.gif) -140px -100px",
"children": [
{
$type:"Label",
height: "30"
},
{
$type:"Label",
width: "320",
height: "20",
text: "仓库编码无效,请重新输入!",
}],
});
//----------------------------------------------------------------------------//
set添加数据
this.get("#dsProduct").getData().insert();
或者this.get("#dsProduct").insert();
this.get("#dsProduct.data").insert();推荐使用
“#dsProduct.data”表示拿到数据对象
2.删除当前选择记录
var record = this.get("#dsProduct.data:#");
if (record) {
dorado.MessageBox.confirm("确认要删除当前记录吗?", function(){
record.remove();
});
}
else {
dorado.MessageBox.alert("当前没有数据可以删除!");
}
//获得当前dataset的字段,并赋值(dorado7升级包,特别注意)
var pkVipCustomer = view.get("#dsVipCustomer.data:#").get("PK_COO_CRM_VIPCUSTOMER");
view.get("#dsVipCustomerCoop").set("parameter",{
pkVipCustomer: pkVipCustomer,
org:"test"
});
//含有下级Reference
view.get("#dsPrCenter").getData("#").getData("#stmain");
view.get("#dsPrCenter").getData("#.#stmain");
3.dataset放弃当前操作数据
this.get("#dsProduct.data:#").cancel();
//----------------------------------------------------------------------------//
dorado.MessageBox.show({
icon: "WARNING",
title: "自定义个的标题",
message: "这是一个自定义的对话框",
buttons: ["yes", "no", "cancel"],
closeAction: "cancel",
detailCallback: function(button, text) {
dorado.widget.NotifyTipManager.notify("您选择了\"" + button + "\"。");
}
});
//----------------------------------------------------------------------------//
dorado.Core.setTimeout(s, function() {this.XXX;}, 2000);
//----------------------------------------------------------------------------//
自定义通知消息是指,我们可以通过notify方法对通知消息提示框做更多的特性设定,如本例通过一个JSON对象定制NotifyTip的特性:
dorado.widget.NotifyTipManager.notify({
text : "消息提示.....",
caption : "<重要通知>",
icon : "INFO",
autoHide : false,
listener : {
onHide : {
fn : function() {
tip = null;
self.set("disabled", false);
}
}
}
});
上述代码将
提示信息通过text设定
caption修改为"重要通知"(默认为"系统通知")
通过icon属性自定义提示信息的图标
autoHide设置为false,禁止通知消息自动关闭
通知消息提示框关闭后按钮才变得可操作
关于notify更多的自定义方法请通过Client-API的dorado.widget.NotifyTipManager.notify查看。
//----------------------------------------------------------------------------//
非阻塞式的指示器在任务执行的过程中还可以继续做页面操作。
非阻塞式的指示器用法比较简单,大致代码为:
dorado.util.TaskIndicator.showTaskIndicator("测试非阻塞任务指示器");
dorado.widget.NotifyTipManager.notify("通知信息");
另外对与任务指示器,我们还需要记得去关闭它,如本例:
var taskId = dorado.util.TaskIndicator.showTaskIndicator("测试后台任务" + taskNo);
setTimeout(function() {
dorado.util.TaskIndicator.hideTaskIndicator(taskId);
}, 3000);
上面的代码首先通过showTaskIndicator方法返回的任务指示器的taskId,并调用利用timeout,在3秒钟后调用hideTaskIndicator方法隐藏创建的任务只是器。
//----------------------------------------------------------------------------//
与非阻塞式任务指示器不一样的是,在执行阻塞式的任务指示器的时候,指示信息始终在页面中居中显示,另外我们还可以注意到阻塞式的任务指示器执行的时候,页面无法继续操作,知道阻塞式的任务指示器任务执行完毕才可以。
其基本用法与非阻塞式的指示器的用法非常类似:
dorado.util.TaskIndicator.showTaskIndicator("测试主任务","main");
其中唯一的差别在于,多了一个"main"参数,在showTaskIndicator方法中通过这个参数判断是否需要阻塞效果。
与非阻塞任务指示器一样,我们还需要记得去关闭它,如本例:
var taskId = dorado.util.TaskIndicator.showTaskIndicator("测试后台任务", "main");
setTimeout(function() {
dorado.util.TaskIndicator.hideTaskIndicator(taskId);
}, 3000);
上面的代码首先通过showTaskIndicator方法返回的任务指示器的taskId,并调用利用timeout,在3秒钟后调用hideTaskIndicator方法隐藏创建的任务只是器
//----------------------------------------------------------------------------//
我们希望在一个新的页面中嵌入原来已经开发定义好的单表数据维护界面,则可以这么定义:
<?xml version="1.0" encoding="UTF-8"?>
<ViewConfig>
<View title="子视图" layout="padding:20">
<Panel caption="一个面板控件" collapseable="true" width="800" height="300" layout="padding:1">
<SubViewHolder subView="com.bstek.dorado.sample.data.SimpleCRUD" />
</Panel>
</View>
</ViewConfig>
以上代码部分,我们利用了SubViewHolder控件,并在subView属性中指定希望引用的页面的URL:com.bstek.dorado.sample.data.SimpleCRUD,最终效果如下:
http://wiki.bsdn.org/pages/viewpage.action?pageId=1509634
//----------------------------------------------------------------------------//
// @Bind #actionSave.onGetUpdateData
!function(arg){
arg.data = view.get("#dsProducts").getData("#");//设定需要提交的实体对象为dsProducts的当前记录
}
则最终这个UpdateAction执行的时候就只提交dsProducts中的当前记录。
另外如果UpdateAction中有多个UpdateItem,在Client-API中说明了:此事件在提交过程中会针对每一个UpdateItem触发一次。
因此编写代码的时候就需要区别对待不同的UpdateItem:
// @Bind #actionSave.onGetUpdateData
!function(arg){
if (arg.updateItem.alias=="dataset1"){
arg.data = view.get("#dataset1").getData("#");//设定需要提交的实体对象为dataset1当前记录
}
else if (arg.updateItem.alias=="dataset2"){
//什么都不做,默认根据UpdateItem的dataPath获取数据的操作
}
else if (arg.updateItem.alias=="dataset3"){
arg.data = view.get("#dataset3").getData();//设定需要提交的实体对象为dataset3的所有数据
}
else if (arg.updateItem.alias=="dataset4"){
arg.data = view.get("#dataset4").getData("[@.get(/"categoryName/").length > 5]");//设定需要提交的实体对象为dataset4中所有产品类型名称长度大于5的数据
}
}
//----------------------------------------------------------------------------//
注释格式:
1、单行(single-line)注释:“//……”
2、块(block)注释:“/*……*/”
3、文档注释:“/**……*/”
4、javadoc 注释标签语法
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
//----------------------------------------------------------------------------//
可设置的比较操作符号有:
符号
说明
like substr匹配
like* 匹配字符串前面的字符
*like 匹配字符串后面的字符
= 等于判断
<> 不等于判断
> 大于判断
>= 大于等于判断
< 小于判断
<= 小于等于判断
//----------------------------------------------------------------------------//
displayFormat
根据DataColumn的dataType设置数据的格式.
Date的format范例:
Date的format范例
说明
Y-m-d 返回类似"2000-09-25"的字符串
H:i:s 返回类似"23:10:30"的字符串
Y年m月d日 H点i分s秒 返回类似"2000年09月25日 23点10分30秒"的字符串
Float的format范例:
Float的format范例
说明
#,##0.00 123456789.789格式化为 123,456,789.79
$#,##0.00/DAY 1234.567格式化为 $1,234.57/DAY
(###)######## 02145375683格式化 (021)45375683
更详细的格式设置,请参考Client-API文档中:
Date
dorado.util.Common
//----------------------------------------------------------------------------//
readOnly
用于控制DataColumn的只读属性。支持可以动态设置:
dataColumn.set("readOnly", true/false);
通过js动态设置readOnly属性后DataColumn会动态调整自身的编辑模式。
//----------------------------------------------------------------------------//
renderer
功能同Grid的cellRenderer,详细说明请参考:Grid(DCUG)
通过DataColumn的cellRenderer属性,使我们可以为不同的DataColumn定制不同的cellRenderer。
Grid为DataColumn默认提供了几个CellRenderer的实现类:
dorado.widget.grid.DefaultCellRenderer:默认的表格列脚渲染器。
dorado.widget.grid.CheckBoxCellRenderer:用于将一个复选框填充到表格单元格中单元格渲染器。
dorado.widget.grid.RadioGroupCellRenderer:用于将一个单选框组填充到表格单元格中单元格渲染器。
dorado.widget.grid.ProgressBarCellRenderer:用于将一个进度条填充到表格单元格中单元格渲染器。
dorado.widget.grid.CheckBoxCellRenderer应用范例:
如果DataColumn的dataType属性为boolean或Boolean,则DataColumn会自动的将dorado.widget.grid.CheckBoxCellRenderer作为自身的单元格渲染器。但是如果数据类型是String类型,那么我们就可以通过定制renderer属性实现,如下范例:
如果你的数据无法与此匹配,则也可以通过如下的方式详细设定ProgressBarCellRenderer的属性:
// @Bind #grid.onCreate
!function(self, arg) {
MyCheckBoxCellRenderer = $extend(dorado.widget.grid.CheckBoxCellRenderer,{
createSubControl: function(arg) {
var checkbox = $invokeSuper.call(this, arguments);
checkbox.set({
offValue: "N",
onValue: "Y",
triState: true
});
return checkbox;
}
});
self.getColumn("ga").set("renderer", new MyCheckBoxCellRenderer());
}
//----------------------------------------------------------------------------//
我设定page,一页显示50笔资料,当我滚动条拉倒最下时,自动将第2页资料接到前1页资料后面显示,依次类推。
---可以,要设置Grid的supportsPaging属性为true
当然,也可以直接点击下一页看第2页资料。
--可以,通过datapilot
另外,还可以设定最大显示的页数,比如显示到第3页资料时,必须点下一页才能进入下一页显示第4页资料。
--不能通过属性设置实现,可以通过事件控制实现,dataSet提供了beforeLoadData事件,每一次页面加载的时候都会触发,该事件只要返回一个doraod.AbortException就可以阻止默认的数据加载动作。可以利用此事件接口实现你的业务逻辑。
//----------------------------------------------------------------------------//
if(arg.data){
var res;
ajaxWareHouse.set("parameter",arg.data).execute(function(e){
res=e;
});
if(res){
dsMain.getData("#").set("warehouseName",res.CKM);
}else{
throw new dorado.Exception("仓库编号不存在,或当前用户无权限!");
}
}
后台返回的是map
//----------------------------------------------------------------------------//
在DATATYP中的property中添加自定义校验事件
if(arg.data){
var res;
queryCk.set("parameter",{"ckbm": arg.data}).execute(function(e){
if(e.length == 1){
var ckm = e[0].NAME;
res = ckm;
}
});
if(res){
view.get("#dsMoreUpdate").getData("#").set({"endckname" : res });
}else{
view.get("#dsMoreUpdate").getData("#").set({"endckname" : null });
throw new dorado.Exception("仓库编码无效,请重新输入!");
}
}
注意要将queryCk这个ajaxAction的异步属性关闭
//----------------------------------------------------------------------------//
//@Bind #startcw.onBlur
//@Bind #endcw.onBlur
!function(self, arg){
var str = self.get("value");
if(str != null){
var uperStr = str.toUpperCase();
view.get("#dsMoreUpdate").getData("#").set(self.get("property"), uperStr);
}
};
//----------------------------------------------------------------------------//
dorado事件的更多相关文章
- Dorado事件的参数
onClick,onSuccess 事件一般只有2个参数(self,arg),其实参数是可以添加的.可以把控件的ID直接放到参数里面来,然后在事件编辑里直接通过ID作控件对象,直接设值就好了,不要输入 ...
- dorado-menu
1.menu控件是一个下拉菜单控件,可以设置数icon(图标),click事件,Dorado事件中都有self和arg两个参数,其中self是当前控件本身 2.menu控件可以和toolBar结合使用 ...
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- dorado重置按钮事件
// @Bind #btnReset.onClick!function(self, arg) { var subNo = view.get("#dsQueryCriteria"). ...
- dorado抽取js
dorado创建的视图文件如果有控件拥有事件的话,那么它是可以抽取js的, 右键视图->抽取JavaScript 然后就会出现一个同名的.js文件 (注意,所有的属性需要有id,因为js需要绑定 ...
- Container容器控件的使用、Hbox与Vbox布局管理器的使用、以及AjaxAction前后台事件响应
1.由于有前后台交互功能,需要在Spring上下文中注册一个用于提供服务的bean,对于这个bean使用Spring提供的@Component标注,如果需要使用@Component注解,需要在项目中W ...
- 初学dorado
初学dorado 1.dorado使用视图来写界面代码,超级轻松:还需要画流程,页面间的跳转应该很轻松了. 2.先新建dorado项目,再创建dorado视图 3.在Servers里双击tomacat ...
- dorado中的视图实现类和监听器
视图模型实现类(DefaultViewModel.java)的主要功能: 1. Dataset的初始化以及数据导入 2. 各种View组件的初始化工作 DefaultViewModel也是动态创建 ...
- dorado开发模式下实现动态查询
使用dorado开发模式,我们可以实现以下开发技巧 开发技巧1.实现动态查询功能: 1. 查询按钮的onClick事件中写入: datasetEmployee.parameters().setValu ...
随机推荐
- 使用Xamarin实现串口通讯
前几天我写了年度总结,然后有人说让我教一下他Xamarin串口通讯怎么做,其实跟java没有多大区别. 记得我刚开始接到公司这个项目的时候很懵逼,我去看了别的安卓串口工具,都不行我当时是RS232串口 ...
- File Transfer(并查集)
题目大意:将多个电脑通过网线连接起来,不断查询2台电脑之间是否连通. 问题来源:中国大学mooc 05-树8 File Transfer (25 分) We have a network of com ...
- vue中的样式
一.使用class样式: CSS部分: <style> .green{ color:green; } .italic{ font-style:italic; } .thin{ ; } .a ...
- python编辑三级目录
一.需求分析 三级目录要能够实现以下要求: 显示根目录,任何子目录中都可以通过输入b字符来返回根目录 任何子目录中都可以通过输入q字符来返回上一级目录 主目录进入子目录后,系统能够打印子目录,根据指打 ...
- Tensorflow、Pytorch、Keras的多GPU使用
Tensorflow.Pytorch.Keras的多GPU的并行操作 方法一 :使用深度学习工具提供的 API指定 1.1 Tesorflow tensroflow指定GPU的多卡并行的时候,也是可以 ...
- .net mvc5 不同view()的视图 代码
public class Test { public int id { set; get; } public string name { set; get; } } public ActionResu ...
- Sublime Text 3高效实用快捷键
2017-11-27 16:18:48 Sublime Text 3 高效实用快捷键 Sublime Text 3 软件及注册码 官网下载链接在这里,有时候会很神奇的上不去,可能是因为被Q了,可能就是 ...
- gulp配置文件(gulpfile.js)
需要安装的插件 "gulp": "^3.9.1","gulp-clean": "^0.3.2","gulp-c ...
- Planning The Expedition(暴力枚举+map迭代器)
Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...
- 第二次c++作业
用c语言实现电梯问题的方法: 先用一堆变量存储各种变量,在写一个函数模拟电梯上下移动载人放人的过程. c++: 构造一个电梯的类,用成员函数实现电梯运作的过程. 对c和c++的理解太浅,并没有感觉到用 ...