Dojo 编程按钮比声明按钮短?

Posted

技术标签:

【中文标题】Dojo 编程按钮比声明按钮短?【英文标题】:Dojo programmatic Button shorter than declarative Button? 【发布时间】:2015-03-31 18:30:04 【问题描述】:

我正在使用 Dojo1.9.1 运行,并注意到在我将按钮固定在以编程方式生成的按钮旁边的页面上,编程按钮更短。我已经在 jsfiddle https://jsfiddle.net/gregorco/6sn6998t/3/ 上重现了这个问题

html

<div id="testDiv">
    <table>
        <tr>
            <td>
                <div id="divForProgButton"></div>
            </td>
            <td>
                <div>
                    <button data-dojo-type="dijit/form/Button" data-dojo-id="declaredButton" id="declaredButton" type="button">Declarative Button two pixels taller??</button>
                </div>
            </td>
        </tr>
    </table>
</div>

javascript

require(["dojo/dom",
"dojo/parser", "dojo/dom-construct", "dijit/form/Button", "dojo/ready"], function (dom, parser, domConstruct, Button, ready) 
ready(function () 
    parser.parse("testDiv");
    var buttonsDiv = dom.byId("divForProgButton");
    var progButton = new Button(
        'id': 'programmaticButton',
            'name': 'programmaticButton',
            'innerHTML': 'Programmatic Button'
    );
    domConstruct.place(progButton.domNode, buttonsDiv);
    progButton.startup();
);
);

这很微妙,但您可以看到(以及通过 Firebug 确认)第一个按钮较短。这里它只短了 2 个像素,但在我的系统上它短了 4 个像素——更明显。我已经尝试过 claro 和 tundra 主题,并且都产生了相同的高度差异。

使用 Firebug 检查生成的 HTML 表明声明性 Button 包含 HTML 以支持从未实际显示的图标。程序化 Button 不会生成此类与图标相关的 HTML。不知道这会如何导致声明性 Button 更高,但我没有看到任何其他区别。

任何人都理解编程按钮和声明按钮之间的这种差异,以及如何避免这种差异?

感谢您提供的任何帮助。

谢谢。

【问题讨论】:

您可以尝试在按钮的编程创建中将innerHTML 替换为label。我进行了更改,现在按钮的高度似乎相同。我的假设是 innerHTML 正在覆盖由 Dojo Dijit Machinery 创建的 HTML 片段。因此,您在编程版本中看不到图标节点。我在这里胡乱猜测。 太棒了!那行得通!我以为我已经尝试过了,但我想没有。如果您将评论更改为答案,我会很乐意接受 - 如果可以的话。到目前为止我只有8分,但我会尽可能接受。谢谢! 这个 innerHTML 给了我很多痛苦:-(。你需要非常小心。我很高兴它有帮助。 【参考方案1】:

您可以尝试在按钮的编程创建中将innerHTML 替换为label

var progButton = new Button(
        'id': 'programmaticButton',
            'name': 'programmaticButton',

            /* 'innerHTML': 'Programmatic Button' */
            'label': 'Programmatic Button'
    );

我进行了更改,现在按钮的高度似乎相同。

我的假设是 innerHTML 正在覆盖由 Dojo Dijit Machinery 创建的 HTML 片段。因此,您在编程版本中看不到图标节点。

【讨论】:

当我获得足够的积分时,我会回来支持它 - 但我不允许获得 8 分。再次感谢。

以上是关于Dojo 编程按钮比声明按钮短?的主要内容,如果未能解决你的问题,请参考以下文章

Dojo RadioButton,以编程方式设置组

Dojo声明ConfirmDialog隐藏取消按钮

设置 Dojo 按钮的宽度

Dojo 以编程方式验证 TextBox

dojo中以编程方式与以声明方式创建的小部件之间的区别?

以编程方式(但不是以声明方式)实例化小部件时出现 Dojo 重复 ID 错误