Extjs 中的按钮宽度

2024-01-08

我在 Extjs 中使用 width 属性为按钮提供宽度,但它不起作用......

项目 : [ { xtype:“按钮”, 文本:“好的”, 宽度:120 }]


假设您正在寻求一个调整按钮大小的解决方案。我正在进行一个需要 ExtJS 2.2 的项目,因此假设我们在这里使用的是 ExtJS 2.2。作为报道如下 https://stackoverflow.com/a/7743347/1028230,这一切似乎都适用于 3.1.1+,我刚刚亲自证实了这一点(至少在 3.1.1 中)。

在 2.2 中,我自己无法让它以“正确的方式”工作。让我们以此面板为基础,看看我们可以做些什么来使其按钮具有相同的宽度。

var pnlBtn = new Ext.Panel({
    width:200,
    title:'button panel',
    renderTo: Ext.getBody(),
    items:[
        new Ext.Button({ text:'button 1'}),
        new Ext.Button({ text:'button 12345678901234567890123456789012345678901234567890'})
    ]
});

正如我们所期望的,这为我们提供了一个带有两个不同大小按钮的面板。

现在让我们尝试设置宽度。

var pnlBtn = new Ext.Panel({
    width:200,
    title:'button panel',
    renderTo: Ext.getBody(),
    items:[
        new Ext.Button({ width:200,text:'button 1'}),
        new Ext.Button({ width:100,text:'button 12345678901234567890123456789012345678901234567890'})
    ]
});

奇怪的是,正如OP发现的那样,没有任何变化。

现在似乎可能有一个 autowidth 属性,即使它不在文档中。事实上,似乎其中可能有一些代码来开始处理自动宽度,但它似乎并没有完全完成。

var pnlBtn2 = new Ext.Panel({
        width:200,
        title:'button panel',
        renderTo: Ext.getBody(),
        autoFill:true,
        items:[
            new Ext.Button({ autoWidth:false,width:200,text:'button 1',cls:'billWide'}),
            new Ext.Button({ autoWidth:false,width:100,text:'button 12345678901234567890123456789012345678901234567890'})
        ]
    });

这给了我们一个错误,得到这个,also为我们提供了第一个非自动宽度尺寸的按钮!奇怪的。

ext-all-debug 中这些行的代码是这样的......

Ext.Button.superclass.afterRender.call(this);
if(Ext.isIE6){
    this.autoWidth.defer(1, this);
}else{
    this.autoWidth(); // borks here
} 

所以我们现在已经非常接近了。如果你想破解 Ext 代码中的 Button,你可以自己设置。

相反,让我们在第一个按钮上放置一个 'btnSpam' id,并通过在 Firebug 中搜索来查看其动态创建的 html 是什么,看看我们是否可以保留 Ext 库存/不进行更改。

<table id="btnSpam" class="x-btn-wrap x-btn billWide" cellspacing="0" cellpadding="0" border="0" 
    style="width: auto;">

    <tbody>
        <tr>
            <td class="x-btn-left">
                <i>&nbsp;</i>
            </td>
            <td class="x-btn-center">
                <em unselectable="on">
            </td>
            <td class="x-btn-right">
                <i>&nbsp;</i>
            </td>
        </tr>
    </tbody>
</table>

That's all对于按钮;该按钮是一个表格。

重要的部分是“宽度:自动”。我无法通过 ExtJS 实现这一点,并且我尝试设置一个宽度名为billWide,当然,它会被表标签中的内联样式覆盖。也尝试过设置style直接在按钮中,如下所示:

new Ext.Button({ width:200,text:'button 1',
    cls:'billWide',style:'width:inherit',id:'btnSpam'}),

生成的 html 中仍然是 width:auto 。啊。

因此,您可以使用为按钮分配的 id,并使用 getElementById 围绕 Ext 进行钻取以获取按钮/表格的样式。

var pnlBtn2 = new Ext.Panel({
    width:200,
    title:'button panel 1',
    renderTo: Ext.getBody(),
    autoFill:true,
    items:[
        new Ext.Button({ text:'button 1',id:'btnSpam'}),
        new Ext.Button({ text:'button 12345678901234567890123456789012345678901234567890'})
    ]
});
document.getElementById('btnSpam').style.width='inherit';

Note http://www.w3schools.com/jsref/prop_style_width.asp:

注意:IE7 及更早版本不支持值“inherit”。 IE8 需要 !DOCTYPE。 IE9支持“继承”。

请注意,即使您在第二个按钮上放置一个 id 并设置继承,由于文本太长,该按钮仍然会移到面板的右侧,并且看起来像上面的图像。所以我们本质上是设置从容器继承的最小宽度。

这是我拥有的最好的了。本质上是要发布相同的问题并询问是否有更好的解决方案。

Update:我完全被IE8困住了。它似乎改变了按钮的宽度,然后又弹回来。

var btnTemp = document.getElementById('btnSpam');
alert(btnTemp.style.width);  // reports nothing here; apparently not set yet
btnTemp.style.width='198px';
alert(btnTemp.style.width);  // while it reports 198px, the button IS 198px wide.
// immediately snaps back once alert is gone. seems to do CSS after js?

似乎在某些初始化期间将宽度设置为自动。如果你有这样的拼凑代码......

function testMe()   {
    setTimeout(function() {
        var btnTemp = document.getElementById('btnSpam');
        btnTemp.style.width='198px';
    },150);
}

...并在主体的加载中调用它,一切正常。去搞清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Extjs 中的按钮宽度 的相关文章

  • 如何防止 Ext Js 树中检查更改时的 itemclick 事件

    我在 Ext tree Panel 中添加了两个侦听器 检查更改 和 项目单击 但我注意到 当检查发生更改时 它也会触发项目单击事件 我希望阻止该项目的点击事件 listeners checkchange function node che
  • 使用 ExtJ 进行多选组合框

    如何实现多选组合框作为Ext FormPanel使用ExtJs 我一直在寻找 但似乎找不到与最新版本的 ExtJs 兼容的解决方案 这个问题 https stackoverflow com questions 2635809 multise
  • 从 Ext.data.Store 访问 http 状态代码

    我有一个 http API 令人震惊的新技术 它对设置不同响应状态的不同错误做出反应 问题是 当使用 Ext data Store 和一些 XMLHttpRequest inside 代理时 处理这种状态的最佳方法是什么 据我所知 加载 事
  • extjs 中的级联组合框

    我想在 extjs 中做级联组合框 我必须组合框 课程组合框 xtype combobox emptyText Course id combo course displayField name valueField id store cou
  • Extjs 4.2 缓冲存储同步数据不起作用

    这是商店代码 Ext define NG store WhatsNews extend NG store AbstractStore model NG model auxClasses notifications WhatsNew alia
  • 如何使 svg 元素(例如矩形)scrollIntoView?

    我在图形面板中有一个 svg svg 中的所有节点都在另一个面板中列出 我希望通过单击节点列表中的节点 svg 可以滚动到该节点 每个节点都是一个矩形 但我发现只有上边框在视图中 而节点的其余部分仍然在视图之外 有什么办法可以解决这个问题吗
  • EXTJS 网格中的小数精度

    我有一个网格 允许用户通过编辑行来输入数字 我希望该数字支持 4 位小数 但它只支持 2 位 我想出了如何显示 4 位小数 但它不记录任何超过 2 位小数的内容 因此 如果用户输入 1000 1111 结果字段将在网格中显示 1000 11
  • extjs 3.3:浮动面板

    我正在尝试在其他预先创建的面板上创建一个浮动面板 我尝试遵循简单的代码 但失败了 var testPanel new Ext Panel id testP width 50 height 100 floating true title Te
  • 动态使用存储中的额外参数

    我有一个表格 在表格中 我使用的是comboBox with a store xtype combobox id SubContractor name SubContractor fieldLabel Sub Contractors sel
  • 如何使 extjs 手风琴垂直滚动

    在这里摆弄 https fiddle sencha com fiddle 5gv 如果手风琴中有很多面板 它们就会在垂直方向上相互碰撞 并且无法扩展 我想让手风琴的总高度等于标题的高度加上一个面板主体的高度 展开 然后父面板应该只有一个滚动
  • 如何在 ExtJS 4 中隐藏选项卡

    如何在 ExtJS 4 中隐藏选项卡 Ext getCmp mytab hide 不起作用 谁能帮我 阅读此处的文档 http docs sencha com ext js 4 0 api Ext tab Panel http docs s
  • 将 Flex 值动态添加到 extjs 中的控制器

    我在 视图 中给出了一些项目 容器 布局为hbox 现在我想给flex通过 控制器 为每个项目赋予值 我怎样才能做到这一点 我已经浏览了文档 但找不到任何类似的方法setFlex EDIT Ext apply Ext getCmp IdHe
  • 如何使用 Sencha Touch 数据模型读取嵌套 JSON 结构?

    我整个晚上都在试图解决这个问题 但没有成功 我有一个 JSON 结构如下 来自另一个系统 所以我无法更改其结构 parents parent parentId 1 children child childId 1 ch
  • ExtJS EditorGridPanel 中的级联组合框

    我有一个正在运行的 EditorGrid 面板 其中两列有 ComboBox 编辑器 两个组合框都是从数据库远程加载的 countryStore and cityStore 我想限制cityComboBox仅显示所选国家 地区的城市 我需要
  • 如何创建适用于 iPhone、iPad 和 Android 的 Extjs 应用程序?

    有人成功创建了适用于 iPhone iPad 和 Android 的 Extjs 应用程序吗 我知道 Sencha 不支持移动设备上的 Extjs 但我不想创建另一个仅针对移动设备的网站 我不需要奇特的移动界面 只需要基本的功能 我做了一些
  • 无法加载所需框架:extjs 中的 ext@null

    设置 extjs 和 sencha 当我运行应用程序时出现错误无法加载所需的框架 root samuel pc Documents code test sencha app watch Sencha Cmd v6 5 0 180 ERR U
  • ExtJS打开窗口的最大高度

    我试图通过单击按钮 Ext Button 来打开一个窗口 Ext Window 问题是该窗口的尺寸必须为用户屏幕的 80 宽度和 100 高度 即它应该覆盖所有垂直空间 我真的无法创建一个工作示例 我使用的按钮是隐藏 显示这个窗口 它的大小
  • 如何使用Ext.Ajax登录Spring Security?

    我正在使用 Extjs 6 和 Spring 4 开发一个应用程序 我的应用程序是 Restful 我启用 CORS Origin 如下所示 public class CorsFilter extends OncePerRequestFil
  • NGINX 和 Spark Java 之间的跨源通信

    我正在将 NGINX 和 Sparkjava 用于我的 Web 应用程序 我确信我已正确启用所有 CORS 标头 尽管如此 我还是得到了 XMLHttpRequest 无法加载http localhost 3003 platformAPI
  • 显示最后一条记录值,并非所有值都循环

    在下面的代码中 在 copyChild 和 insideModelRetrieved 函数中 在控制台 4 个功能上一一打印 但在下一个函数 onInnerModelRetrieved 4 次中打印最后一个功能值 我无法弄清楚为什么会发生这

随机推荐