『壹』 用extjs技术怎么在行中嵌入下拉列表框
首先grid的是new Ext.grid.EditorGridPanel可编辑的列表。这里可以配置参数单击或双击编辑所在行,具体的见api。
然后是这里new Ext.grid.ColumnModel([
需要嵌入下拉列表框的列这样定义就哦了
{header : "合同状态",width : 100,sortable : true,align : "center",dataIndex : "state"
,editor : new Ext.form.ComboBox({//编辑的时候变成下拉框。
triggerAction : "all",
width : 120,
editable: false,
store : ["建立","执行","作废","完结"],
resizable : true,
mode : 'local',
lazyRender : true
})
}
『贰』 extjs combo 过滤问题
因为第一次点击的时候 , 这个store可能才开始加载 , 预先加载store试试 , 或者 store 中 autoLoad = true 试试
『叁』 怎么查看extjs filter的过滤
主要利用filter过滤掉未经登录而直接跳转到非登录访问页面。代码而言的话并不难,只是有几点问题需要注意一下。
1.使用filter需要配置web.xml,如果是/*那么在拦截后的页面会连带jsp页面里的js和css一并拦截住。
解决办法是jsp放在jsppage这个文件下,其他css、js并列。配置的时候就/jsppage/*。
还有个办法是在dofilter里面判断在request域拿到url,进行比对,然后过滤。
2.需要设置哪些页面是你不想拦截的【假设所有的页面都放在jsppage内】。
代码见下:
LoginFilert.java
public class LoginFilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) sRequest;
HttpServletResponse response = (HttpServletResponse) sResponse;
HttpSession session = request.getSession();
String url = request.getServletPath();
String contextPath = request.getContextPath();
if (url.equals("")){
url += "/";
}
if ((url.startsWith("/") && !url.startsWith("/jspPage/login"))) {// 若访问后台资源
// 设置不需要过滤的页面
if (url.endsWith("about.jsp")) {
filterChain.doFilter(sRequest, sResponse);
return;
}
// 过滤到login
String admin = (String) session.getAttribute("admin_name");
if (admin == null) {// 转入管理员登陆页面
response.sendRedirect(contextPath + "/jspPage/login.jsp");
return;
}
}
filterChain.doFilter(sRequest, sResponse);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml
loginFilter
util.LoginFilter
loginFilter
/jspPage/*
『肆』 extjs4.1版本 treePanel树形表格列表增加锁定功能(lock)和查询过滤(filter)
刚查的api 有这个参数enableLocking
如果不能全量升级版本的话,可以考虑一下能不能单独升级这部分的代码,重写源码
『伍』 extjs中下拉框的内容实现有条件选择,对应的情况下可以选择一些对应的选项
参考代码如下:
{ header: '单位名称', dataIndex: 'unitname',
field:
{ xtype: 'combo',
editable: false,
emptyText: "请选择...",
valueField: "id",
displayField: "text",
mode: 'local',
store: storeddl
}
}
var storeddl = Ext.create('Ext.data.Store', {
proxy: {
type: 'ajax',
url: "../../Handler/SystemHandler/UnitHandler.ashx?Lx=ddl"
},
root: 'items',
forceSelection: true,
// lazyRender: true,
fields: ['id', 'text'],
listeners:
{
select: selectRow,
focus: eventFocus
}
});
『陆』 ExtJS grid表头如何增加下拉项
extjs自己提供复选框列
//checkbox列
varfilecheckbox=newExt.grid.CheckboxSelectionModel();
//GridPanel
varfileGrid=newExt.grid.GridPanel({
store:fileStore,
columns:[
newExt.grid.RowNumberer(),//显示列数
filecheckbox,//显示复选框列
{//其他显示列}]
//省略其他属性
});
这样你就可以而得到一个复选框,可以进行单选、全选了
如果你想自己定义的话,也可以
//定义filters
varfilters=newExt.ux.grid.GridFilters({
//
encode:encode,//jsonencodethefilterquery
local:local,//defaultstofalse(remotefiltering)
filters:[{
type:'numeric',
dataIndex:'id'
},{
type:'string',
dataIndex:'company',
disabled:true
},{
type:'numeric',
dataIndex:'price'
},{
type:'date',
dataIndex:'date'
},{
type:'list',
dataIndex:'size',
options:['small','medium','large','extralarge'],
phpMode:true
},{
type:'boolean',
dataIndex:'visible'
}]
});
//
//
//thefiltertypes(
varcreateColModel=function(finish,start){
varcolumns=[{
dataIndex:'id',
header:'Id',
//=true
//tousestore'sfield'stypeproperty(iftypepropertynot
//'auto'which
//GridFilterswillassumetobe'StringFilter'
filterable:true
//,filter:{type:'numeric'}
},{
dataIndex:'company',
header:'Company',
id:'company',
filter:{
type:'string'
//
//,disabled:true
}
},{
dataIndex:'price',
header:'Price',
filter:{
//type:'numeric'//
}
},{
dataIndex:'size',
header:'Size',
filter:{
type:'list',
options:['small','medium','large','extralarge']
//,phpMode:true
}
},{
dataIndex:'date',
header:'Date',
renderer:Ext.util.Format.dateRenderer('m/d/Y'),
filter:{
//type:'date'//
}
},{
dataIndex:'visible',
header:'Visible',
filter:{
//type:'boolean'//
}
}];
returnnewExt.grid.ColumnModel({
columns:columns.slice(start||0,finish),
defaults:{
sortable:true
}
});
};
然后
vargrid=newExt.grid.GridPanel({
colModel:createColModel(4),
plugins:[filters],
//这两个属性是重点,加上去就可以了
});
效果看图片。
建议你去下载官方的源代码,然后看其中的例子。
里面有一个就是如何自定义这个的
『柒』 使用ExtJs生成一个下拉单选框,但是这个单选框在IE浏览器显示正常,在谷歌和火狐浏览器显示不正常,如图
尊敬的用户,您好!很高兴为您答疑。
从界面上来看,您的list数据没有被正确识别,建议您打开您的web控制台看下报错信息,依照您提供的内容来看,这个属于转换错误。
希望我的回答对您有所帮助,如有疑问,欢迎继续咨询我们。
『捌』 Extjs项目中接收json数据点击某个下拉框实现回显数据
使用回调函数对 年假字段赋值.
varholidayType=newExt.form.ComboBox({
store:newExt.data.SimpleStore({ fields:['value','text'],
data:[['0','事假'],['1','病假'],['2','年假']] }),
fieldLabel:'性别',
displayField:'text',
valueField:'value',
triggerAction:'all',
allowBlank:false,
width:86,
editable:false,
mode:'local',
listeners:{
select:function(){
varcomb=this;
if(this.getValue()=="年假"){
Ext.Ajax.request({
url:url,
method:'POST',async:false,scope:this,
params:params,
success:function(response,options){
//alert(response.responseText);
varrsInfo=Ext.util.JSON.decode(response.responseText);
varhaveDays=comb.ownerCt.getComponent('havDays')
//注意这里的引用方式
if(rsInfo.success){
haveDays.setValue(rsInfo.data);
}else{
}
}),
}
},
},
}
});
varhavDays=newExt.form.NumberField({name:'havDays',itemId:'havDays',
fieldLabel:'年假剩余天数',
value:0,});
『玖』 extjs如何让下拉列表展开
extjs中直接显示展开的下拉列表:
Ext.ux.TreeCombo = Ext.extend(Ext.form.ComboBox, {
constructor : function(cfg) {
cfg = cfg || {};
Ext.ux.TreeCombo.superclass.constructor.call(this, Ext.apply({
maxHeight : 300,
editable : false,
mode : 'local',
triggerAction : 'all',
rootVisible : false,
selectMode : 'all'
}, cfg));
},
store : new Ext.data.SimpleStore({
fields : [],
data : [[]]
}),
// 重写onViewClick,使展开树结点是不关闭下拉框
onViewClick : function(doFocus) {
var index = this.view.getSelectedIndexes()[0], s = this.store, r = s.getAt(index);
if (r) {
this.onSelect(r, index);
}
if (doFocus !== false) {
this.el.focus();
}
},
tree : null,
// 隐藏值
hiddenValue : null,
getHiddenValue : function() {
return this.hiddenValue;
},
setHiddenValue : function(code, dispText) {
this.setValue(code);
Ext.form.ComboBox.superclass.setValue.call(this, dispText);
this.hiddenValue = code;
},
initComponent : function() {
var _this = this;
var tplRandomId = 'deptcombo_' + Math.floor(Math.random() * 1000) + this.tplId
this.tpl = "<div style='height:" + _this.maxHeight + "px' id='" + tplRandomId + "'></div>"
this.tree = new Ext.tree.TreePanel({
border : false,
enableDD : false,
enableDrag : false,
rootVisible : _this.rootVisible || false,
autoScroll : true,
trackMouseOver : true,
height : _this.maxHeight,
lines : true,
singleExpand : true,
root : new Ext.tree.AsyncTreeNode({
id : _this.rootId,
text : _this.rootText,
leaf : false,
border : false,
draggable : false,
singleClickExpand : false,
hide : true
}),
loader : new Ext.tree.TreeLoader({
dataUrl : _this.url
})
});
this.tree.on('click', function(node) {
if ((_this.selectMode == 'leaf' && node.leaf == true) || _this.selectMode == 'all') {
// if (node.parentNode && node.parentNode.attributes.id != '000000') {
var dispText = node.text;
var code = node.id;
while (node.parentNode && node.parentNode.attributes.id != '000000') {
if (node.parentNode.text != dispText) {
dispText = node.parentNode.text + dispText;
}
node = node.parentNode;
}
_this.setHiddenValue(code, dispText);
_this.collapse();
}
});
this.on('expand', function() {
this.tree.render(tplRandomId);
});
Ext.ux.TreeCombo.superclass.initComponent.call(this);
}
})
Ext.reg("treecombo", Ext.ux.TreeCombo);
只要设置singleExpand : true, 即可!
『拾』 ExtJs grid 如何实现按照每一列进行筛选
store 有一个 filter 方法。
store.filter(columnIndex, searchValue);
columnIndex - 要过滤的字段的 dataIndex
searchValue - 过滤条件
但是在数据庞大或者数据改动比较多的系专统里不建议这属么做。
本地过滤意味着第一次查询要查询所有的数据,这样会很慢。
再就是如果一直保持者第一次查询的数据的话,数据准确性也很低。