//----------------------------------------------------------------------------//

//校验实体数据是否填写
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事件的更多相关文章

  1. Dorado事件的参数

    onClick,onSuccess 事件一般只有2个参数(self,arg),其实参数是可以添加的.可以把控件的ID直接放到参数里面来,然后在事件编辑里直接通过ID作控件对象,直接设值就好了,不要输入 ...

  2. dorado-menu

    1.menu控件是一个下拉菜单控件,可以设置数icon(图标),click事件,Dorado事件中都有self和arg两个参数,其中self是当前控件本身 2.menu控件可以和toolBar结合使用 ...

  3. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  4. dorado重置按钮事件

    // @Bind #btnReset.onClick!function(self, arg) { var subNo = view.get("#dsQueryCriteria"). ...

  5. dorado抽取js

    dorado创建的视图文件如果有控件拥有事件的话,那么它是可以抽取js的, 右键视图->抽取JavaScript 然后就会出现一个同名的.js文件 (注意,所有的属性需要有id,因为js需要绑定 ...

  6. Container容器控件的使用、Hbox与Vbox布局管理器的使用、以及AjaxAction前后台事件响应

    1.由于有前后台交互功能,需要在Spring上下文中注册一个用于提供服务的bean,对于这个bean使用Spring提供的@Component标注,如果需要使用@Component注解,需要在项目中W ...

  7. 初学dorado

    初学dorado 1.dorado使用视图来写界面代码,超级轻松:还需要画流程,页面间的跳转应该很轻松了. 2.先新建dorado项目,再创建dorado视图 3.在Servers里双击tomacat ...

  8. dorado中的视图实现类和监听器

    视图模型实现类(DefaultViewModel.java)的主要功能:  1. Dataset的初始化以及数据导入  2. 各种View组件的初始化工作 DefaultViewModel也是动态创建 ...

  9. dorado开发模式下实现动态查询

    使用dorado开发模式,我们可以实现以下开发技巧 开发技巧1.实现动态查询功能: 1. 查询按钮的onClick事件中写入: datasetEmployee.parameters().setValu ...

随机推荐

  1. DataRow的RowState属性变化

    DataRow的RowState属性(状态)取值有5种:Detached, Unchanged, Added, Deleted, Modified. 当我们用DataRow newRow = Data ...

  2. 【TCP_协议_socket接口】-jmeter

    1.ip 2.端口号 3.传入参数 4.告诉软件返回  最后以为是什么,不然就会报错 或者无限制的等待  查ascll 码表 启动接口的方法

  3. 3.5星|《算法霸权》:AI、算法、大数据在美国的阴暗面

    算法霸权 作者在华尔街对冲基金德绍集团担任过金融工程师,后来去银行做过风险分析,再后来去做旅游网站的用户分析.后来辞职专门揭露美国社会生活背后的各种算法的阴暗面. 书中提到的算法的技术缺陷,我归纳为两 ...

  4. C#匿名参数(转载too)

    匿名方法是在初始化委托时内联声明的方法. 例如下面这两个例子: 不使用匿名方法的委托: using System; using System.Collections.Generic; using Sy ...

  5. 搭建Git工作环境

    为什么要做版本控制? 在平时的工作中,经常会遇到写文档的事情,而写文档基本都不会一蹴而就,总是会修修改改很多次,而版本控制能够记录每次修改的版本,能够进行回溯.有很多版本控制工具,但是作为一个程序员, ...

  6. linux 性能分析命令及其解释

    很多时候,我们需要对linux上运行的环境大体有一个了解,那么久需要大体知道当前系统的相关资源的使用情况,那么可以用一些linux提供的丰富的命令来查看 性能分析 vmstat 虚拟内存统计 用法 U ...

  7. 欢迎来怼—第二次Scrum会议

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/14 18:30~18:47,总计17min.地点:东北师范 ...

  8. HDU 5661 Claris and XOR 贪心

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5661 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  9. java锁有哪些类(转)

    转载来源:http://www.cnblogs.com/lxmyhappy/p/7380073.html 1.Java都有哪些锁? 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/ ...

  10. 通过js读取元素的样式

    /* * 通过元素.style.样式只能获取到内联样式的值,就是style写在元素里面的值,不能获取嵌入式和外联样式的值 * 所以如果要获取除内联样式后的值,就不能通过这个获取 * alert(box ...