如何添加 optgroup do dijit.form.Select 或其他小部件类型

Posted

技术标签:

【中文标题】如何添加 optgroup do dijit.form.Select 或其他小部件类型【英文标题】:How to add optgroup do dijit.form.Select or other widget type 【发布时间】:2017-05-04 13:44:05 【问题描述】:

我需要在 dijit/dojo 小部件中创建一个“类别”划分,可以是 dijit.form.Select 或其他类型。

视觉效果应该类似于(使用 optgroup 时):

<select>
  <optgroup label="Swedish Cars">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
  </optgroup>
  <optgroup label="German Cars">
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
  </optgroup>
</select>

我的代码:

require(["dijit/form/Select", "dojo/_base/window", "dojo/domReady!"], function(Select, win)
    new Select(
        name: "select2",
        options: [
             label: "Volvo", value: "volvo" ,
             label: "Saab", value: "saab", selected: true ,
             label: "Mercedes", value: "mercedes" ,
             label: "Audi", value: "audi" 
        ]
    ).placeAt(win.body()).startup();
);

【问题讨论】:

我想你已经知道了 ;) 【参考方案1】:

据我所知optgroup dijit 不应该直接支持它。 但是您可以在属性label 中添加html 标记来实现视觉上相似的效果。

使用&lt;i&gt; 标记的示例使小部件中的条目变为斜体(您可以在其中添加真正喜欢的内容,甚至是图像并使用CSS 设置样式):

require(["dijit/form/Select", "dojo/_base/window", "dojo/domReady!"], function(Select, win)
    new Select(
        name: "select2",
        options: [
             label: "<i>Swedish Cars</i>", value: "" ,
             label: "Volvo", value: "volvo" ,
             label: "Saab", value: "saab", selected: true ,
             label: "<i>German Cars</i>", value: "" ,
             label: "Mercedes", value: "mercedes" ,
             label: "Audi", value: "audi" 
        ]
    ).placeAt(win.body()).startup();
);

编辑:

为了为我的一个项目找到解决此问题的方法,我创建了一个新组件专用dijit-select-optgroup(MIT 许可证)。

SelectOptgroup 是一个可样式化、可搜索的下拉选择框 包含选项分组的 Dojo(类似于 html 带有 ) 的元素。

A demo is visible here.

使用示例:

var instance = new SelectOptgroup(
    options: [
        
            label: 'Optgroup item',
            value: '',
            optgroup: true // mark menu item as optgroup
        ,
        
            label: 'Option item',
            value: 'option '// mark menu item as option
        ,
        
            label: '', // empty strings mark menu item as separator
            value: ''
        ,
        
            label: '<div class="SelectOptgroup__nested"><span class="select__icon">Icon Text</span></div>', // html allowed in menu item
            value: 'grunt'
        
    ]
, 'domId');

替代解决方案: http://vafada.github.io/chosen-dojo/

【讨论】:

以上是关于如何添加 optgroup do dijit.form.Select 或其他小部件类型的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap selectpicker - 如何动态添加 optgroup

动态添加 optgroup 列表

在 Select2 中动态添加选项和 optgroup

jQuery Select2 - 如何隐藏 Select2 Optgroup

如何在引导多选中实现 optgroups(淘汰赛绑定)

如何使用 JSON 在 select2 中设置 optgroup