一、前端
a) 所有类名: 首字母大写 后接 驼峰规则
b) 所有字段名:首字母小写 后接 驼峰规则
c) Model:同所有此类名
d) Store::同所有此类名[做chart的store时加Chart]
e) Control:同panel名
f) Panel:管理对象类名+Panel
g) Grid:管理对象类名+Grid
h) Form:管理对象名+Form+[Add/Modify]
i) Id:同本类名
j) 请求:管理对象名+Controller?+[create/read/update/destroy]
Eg:
create: 'postController?create',
read: 'postController?read',
update: 'postController?update',
destroy: 'postController?destroy'
k) Reader.root:rows
l) reader.successProperty:success
m) Store.Pagesize:100
n) 无需分页的 store.pagesize:1000000
o) String 长度限制 50(name) 200(desc)
p) 动态刷新用taskmanager 做轮询。动态刷新的grid不待编辑功能
Eg:
userTask: {
run: function(){
console.info("find component test-------------111111-");
Do somthing
}
);
},
interval:100000
},
。。。。。。。。
Ext.TaskManager.start(this.userTask);
Ext.TaskManager.stop(this.userTask);
q) 简单对象管理全部依赖gird直接完成
r) Selector 帮助记忆:
i. #postmanagement 定位id为postmanagement 的component
ii. 大挂号中添加条件
s) Ext.grid.view loadMask 为false 时store load时 不显示mask。在自动轮询的grid中这么实用比较好
t) 按值改变grid中行显示显色的方法
var girdcount=0;
for(r in records){
console.info(records[r].data.status);
if(records[r].data.status==0){
agentStatusGrid.getView().getNode(girdcount).style.backgroundColor='#FFFF00';
}else if(records[r].data.status==1){
agentStatusGrid.getView().getNode(girdcount).style.backgroundColor='#FF1493';
}else if(records[r].data.status==2){
agentStatusGrid.getView().getNode(girdcount).style.backgroundColor='#DCDCDC';
}
girdcount=girdcount+1;
}
(上面这个方法在extjs4中不行)
下面是改变字体颜色的方法
1 columns: [
2 {
3 dataIndex: 'alarm',
4 text: '报警状态',
5 renderer:function(val){
6 if(null!=val)
7 return "<p style='color:red'>"+val+"</p>";
8 else return val;
9 }
10 },
u) Extjs 自动的idgenerator 用起来不对,sequence的会产生空重复字段,uuid的回产生空字段。所以用mysql自动生成主键。在store的write方法中添加load方法,使得提交后自动把生成的字段信息load下来。
Extjs 笔记
1、parseInt() 字符串转数字
2、Combox 主动发起 load store的时候有bug(麻痹的肯定是个bug,load的时候把value冲掉,需要点两次才刷新的出来)。绕开的办法只能是在目标的store的load时间中加入combobox.setValue方法。并且combobox的querymode要选择local。并且在beforequery中添加load方法。才能做到每次吧变化的数据load进来并且没有bug
需要注意的是要通过column的getEditor来获得combobox。不然可能要获取的时候combobox还没有生成。
看起来store的autoload配置的确是要去掉。不然的话的确是碰到了很多的莫名其妙的问题了
上面的解决方案不是最好的。这的确是4的一个bug。这个bug的另一面是当combobox的store被load之后mask 永远都显示在哪里。解决方法是
Ext.override(Ext.LoadMask, {
onHide: function() {
this.callParent();
}
});
总结一下就是,local的querymode。加自动load。然后加上上面这个override。然后不必为每个combobox定义自己的store就是目标实体的store就好了。要刷新的时候load一下目标store。或者在目标store的write事件上每次load。这是现在的做法
另外要将combobox的forceselect选中,以限制用户不能所以输入。同事避免出现html code在输入框中的bug。
3、麻痹的model主键不能太长,不然读不出来。有一个低能的bug。
4、Ext.application 中的views 没啥用。
5、一对多关联的时候,关联字段服务端用set 客户端用int array。在field的type就是auto。有个问题当这个字段没有值的时候auto出来的是“”字段串,需要在此字段的converter中加上
if(v==""){
return new Array();
}
return v;
6、Jpa只能有一端维护关系。虽然看上去manytomany的注解。其实一样的。加了mapedby的那段不能维护关系。
1)、多对多关系中一般不设置级联保存、级联删除、级联更新等操作。
2)、可以随意指定一方为关系维护端,在这个例子中,我指定Player为关系维护端,所以生成的关联表名称为: player_game,关联表的字段为:player_id和game_id。
3)、多对多关系的绑定由关系维护端来完成,即由Player.setGames(games)来绑定多对多的关系。关系被维护端不能绑定关系,即Game不能绑定关系。
4)、多对多关系的解除由关系维护端来完成,即由Player.getGames().remove(game)来解除多对多的关系。关系被维护端不能解除关系,即Game不能解除关系。
5)、如果Player和Game已经绑定了多对多的关系,那么不能直接删除Game,需要由Player解除关系后,才能删除Game。但是可以直接删除Player,因为Player是关系维护端,删除Player时,会先解除Player和Game的关系,再删除Player。
7、Hash fregment 就是url中包含#号后面的部分。这部分的东西不会发起request请求。是给页面中的js用来的做state转换用的。获得hash fregment的方法就是document.location.hash。
Eg:
Ext.onReady(function() {
Ext.MessageBox.alert('alert',document.location.hash);
});
8、Extjs4 request 对象中加入 afterRequest( request, success )。以获取请求成功与否。