[img]http://i3.6.cn/cvbnm/58/27/cb/f01a39900b2a0d728a00e02f3c1d65de.jpg[/img]
如图,,但我点击labels这个splitButton里的那个add new label:下的textfield的时候(点击任何一个menu的item),不要让他上拉上去,而但鼠标点击外面的其他东西时,就上拉上去。这个怎么做?
里面的text1,text2,text3……是从数据库里捞出来的,你觉得用什么来装好呢?我的是用一个grid来装的,而且grid里加了个Ext.grid.CheckboxSelectionModel!
多谢了
我没有分了,分不够再加
[b]问题补充:[/b]
但是我的menu是这样写的哦
var menu= new Ext.menu.Menu({
items: [{text : 'Tag alarm(s) to:'},new Ext.menu.Adapter(grid),new Ext.menu.Adapter(searchpl)]
});
grid 是个grid,searchpl是个panel,
他们是不能加hideOnClick:false这个的呀,应该怎么做?
[b]问题补充:[/b]
很高兴再次遇到了你!
[b]问题补充:[/b]
我刚才按你说的那样做了,但还是不行哦,,
[code="js"]
Ext.namespace('Alarmprocessor.eventbrowser');
Alarmprocessor.eventbrowser.LabelsSplitButton=function(){
var grid = new Ext.grid.GridPanel({
hideOnClick:false,
trackMouseOver:false,
store: new Ext.data.JsonStore({
root : 'profileList',
storeId : 'profileListStore',
url : 'userprofile.do',
baseParams : {
method : 'getUserProfileList'
},
fields : ['config']
}),
columns: [{header: "label", dataIndex: 'labeltext'}],
//sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
hideHeaders :true,
width:150,
height:100
});
var searchText=new Ext.form.TextField({
hideLabel :true
});
var searchpl=new Ext.Panel({
hideOnClick:false,
layout:'column',
items:[searchText,{html : '<img id="addbtn" width=25 heigth=30 src="images/add-btn.jpg"/>'}]
});
// onClick=addLabels()
// Ext.getCmp('addbtn').on('onclick',function(){
// addLabels();
// });
// function addLabels(){
// Ext.Msg.alert("test","testtt");
// };
// addTrigger.on('ontriggerclick',function(){
// Ext.Msg.alert("ok","abc");
// });
// var colLabelpl=new Ext.Panel({
// layout:'form',
// id:'allpalabels',
// items:[{text : 'Tag alarm(s) to:'},grid,'-',addTrigger]
// });
// var c = new Ext.Panel({
// id: 'allpalabels',
// items: {
// layout: 'form',
// border: false,
// items: [{text : 'Tag alarm(s) to:'},grid,'-',addTrigger]
// }
// });
var menu= new Ext.menu.Menu({
items: [{hideOnClick:false,text : 'Tag alarm(s) to:'},new Ext.menu.Adapter(grid),new Ext.menu.Adapter(searchpl)]
});
menu.on('itemclick',function(baseItem,e){
//Ext.getCmp('labelsplit').fireEvent("arrowclick", Ext.getCmp('labelsplit'), e);
Ext.getCmp('labelsplit').fireEvent("arrowclick", Ext.getCmp('labelsplit'), e);
//Ext.Msg.alert("aaa","bbbb");
});
Alarmprocessor.eventbrowser.AlarmStatusSplitButton.superclass.constructor.call(this, {
text: 'Labels',
id:'labelsplit',
handler : function onButtonClick(btn) {
Ext.Msg.alert('Button Click', 'You clicked the "{0}" button.',
btn.text);
},
menu:menu
});
}
Ext.extend(Alarmprocessor.eventbrowser.LabelsSplitButton, Ext.SplitButton)
[/code]
代码是这样的
[b]问题补充:[/b]
效果是一样的,就是但点击里面的items的时候,就不会上拉,但点击边边的话,就上拉,其实这个不要紧,最重要的是
[code="js"] var searchText=new Ext.form.TextField({
hideLabel :true
});
var searchpl=new Ext.Panel({
hideOnClick:false,
layout:'column',
items:[searchText,{html : ''}] [/code]
点击这个textfield时不要让他上拉就行了,但是这个就是要上啦,加了hideOnClick:false还是一样,很感谢你!
[b]问题补充:[/b]
哦,,我再看看。。谢谢你!
是定义的地方搞错了,应该是:
new Ext.menu.Adapter(searchText,{hideOnClick:false})
测试代码如下,本地测试通过
[code="javascript"]
function testSplitButton3(){
var searchText=new Ext.form.TextField({
hideLabel :true
});
var sm = new Ext.grid.CheckboxSelectionModel({});
var grid = new Ext.grid.GridPanel({
hideOnClick:false,
width: 200,
height: 200,
autoScroll: true,
trackMouseOver:false,
sm:sm,
hideHeaders:true,
columns: [
sm,
//{header: '序号', dataIndex: 'id', sortable: true },
//{header: '名字', dataIndex: 'name', sortable: true},
{header: '描述', dataIndex: 'descript', sortable: true}
],
viewConfig:{
forceFit:true
},
store:new Ext.data.SimpleStore({
fields:['id','name','descript'],
data:[
[1,'name001','this is name001'],
[2,'name002','this is name002'],
[3,'name003','this is name003'],
[4,'name004','this is name004']
]
})
});
var btn = new Ext.SplitButton({
renderTo: document.body,
text: 'Options',
menu: new Ext.menu.Menu({
items: [
new Ext.menu.Adapter(searchText,{hideOnClick:false}),
{
text:'add label',
hideOnClick:false
},
{text:'other'},
new Ext.menu.Adapter(grid,{hideOnClick:false})
]
})
});
}[/code]
[code="javascript"]
function testSplitButton3(){
var btn = new Ext.SplitButton({
renderTo: document.body,
text: 'Options',
menu: new Ext.menu.Menu({
items: [
{
text:'add label',
//加这一句
hideOnClick:false
},
{text:'other'}
]
})
});
}
[/code]
[quote]里面的text1,text2,text3……是从数据库里捞出来的,你觉得用什么来装好呢?我的是用一个grid来装的,而且grid里加了个Ext.grid.CheckboxSelectionModel! [/quote]
也可以用Ext.form.CheckboxGroup,不过它只能一次生成,不能动态.
如果要添加就要重新new一个.
你也可以用DataView+XTemplate来做,推荐这个.
一样...加到grid的配置里面去咯...
最终这个配置会被Adapter封装成Menu.Item的时候用到
[code="javascript"]
function testSplitButton3(){
var sm = new Ext.grid.CheckboxSelectionModel({});
var grid = new Ext.grid.GridPanel({
hideOnClick:false,
width: 800,
height: 500,
autoScroll: true,
trackMouseOver:false,
sm:sm,
hideHeaders:true,
columns: [
sm,
//{header: '序号', dataIndex: 'id', sortable: true },
//{header: '名字', dataIndex: 'name', sortable: true},
{header: '描述', dataIndex: 'descript', sortable: true}
],
viewConfig:{
forceFit:true
},
store:new Ext.data.SimpleStore({
fields:['id','name','descript'],
data:[
[1,'name001','this is name001'],
[2,'name002','this is name002'],
[3,'name003','this is name003'],
[4,'name004','this is name004']
]
})
});
var btn = new Ext.SplitButton({
renderTo: document.body,
text: 'Options',
menu: new Ext.menu.Menu({
items: [
{
text:'add label',
hideOnClick:false
},
{text:'other'},
new Ext.menu.Adapter(grid)
]
})
});
}
[/code]
你试下我的这段
3.0里面的话,是不需要hideOnClick:false就可以了,放入textfield自动会不隐藏.
2.2的要看下源码,估计是new Ext.menu.Adapter的问题,监测的dom那里有bug吧.