• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Extjs中ComboBoxTree实现的下拉框树效果(自写)

    发布者: 娅水9213 | 发布时间: 2025-8-13 16:22| 查看数: 84| 评论数: 0|帖子模式

    最近涉及到的一个项目中,需要实现ComboBoxTree的效果,首先,看看效果吧……
    在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;
    },
    getValue: function () { //增加适用性,与原来combo组件一样
    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,
    iconCls: 'ico-root',
    expanded: true,
    leaf: false,
    border: false,
    draggable: false,
    singleClickExpand: false,
    hide: true
    }),
    loader: new Ext.tree.TreeLoader({
    nodeParameter: 'ID',
    requestMethod: 'GET',
    dataUrl: _this.url
    })
    });
    this.tree.on('click', function (node) {
    if ((_this.selectMode == 'leaf' && node.leaf == true) || _this.selectMode == 'all') {
    if (_this.fireEvent('beforeselect', _this, node)) {
    _this.fireEvent('select', _this, node);
    }
    }
    });
    this.on('select', function (obj, node) {
    var dispText = node.text;
    var code = node.id;
    obj.setHiddenValue(code, dispText);
    obj.collapse();
    });
    this.on('expand', function () {
    this.tree.render(tplRandomId);
    });
    Ext.ux.TreeCombo.superclass.initComponent.call(this);
    }
    })
    Ext.reg("treecombo", Ext.ux.TreeCombo);

    之后呢,在主页中添加Extjs类库

    <link href="../ext/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
    <script src="../ext/adapter/ext/ext-base.js" type="text/javascript"></script>
    <script src="../ext/ext-all.js" type="text/javascript"></script>
    <script src="../ext/src/locale/ext-lang-zh_CN.js" type="text/javascript"></script>
    <script src="../ext/ComboBoxTree.js" type="text/javascript"></script>
    <script src="login.js" type="text/javascript"></script>

    其中,login.js的代码如下:

    /* File Created: 五月 27, 2013 */
    Ext.onReady(function () {
    var _window = new Ext.Window({
    title: "查询条件",
    renderTo: Ext.getBody(),
    frame: true,
    plain: true,
    buttonAlign: "center",
    closeAction: "hide",
    maximizable: true,
    closable: true,
    bodyStyle: "padding:20px",
    width: 350,
    height: 300,
    layout: "form",
    lableWidth: 110,
    defaults: { xtype: "textfield", width: 180 },

    如此,上面所述的效果就实现了……

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表