点击splitButton的menu里的item时,不要让它上拉上去

[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]
哦,,我再看看。。谢谢你!

6个回答

是定义的地方搞错了,应该是:
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吧.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问