如何创建dojo组合框下拉列表

How can I create dojo combobox dropdown

本文关键字:dojo 组合 下拉列表 创建 何创建      更新时间:2023-09-26

我为dojo组合框创建了dojodiv元素。现在我想创建一个树状结构来选择下拉值。我想使用读写存储(dojo/data/ItemFileReadStore)通过java脚本文件将树对象附加到div元素中。。。。。

我正在尝试下面的html和js文件,但我得到了下面的错误消息 没有这样的方法dom.byId

组合框的div元素:

<div>
<tr>
<td><label for="fixedSubCategory">Fixed SubCategory</label></td>
<td><select data-dojo-type="dijit/form/ComboBox"
id="fixedSubCategory" name="fixedSubCategory" value="">             
</select></td>
</tr>

要附加树对象的JS文件:

var displayData ={
"identifier":"id",
"label":"name",
"items":[
{
    "type": "parent",
        "name": "Countries",
        "id": "countries",
        "children":[
        {"type":"Leaf", "name":"Country 1", "id":"country1"},
        {"type":"Leaf", "name":"Country 2", "id":"country2"},
        {"type":"Leaf", "name":"Country 3", "id":"country3"},
        {"type":"Leaf", "name":"Country 4", "id":"country4"},
        {"type":"Leaf", "name":"Country 5", "id":"country5"},
        {"type":"Leaf", "name":"Country 6", "id":"country6"}
    ]
    }]}
    var store1 = new dojo.data.ItemFileReadStore({ data: displayData });
    var treeModel = new dijit.tree.ForestStoreModel({
    store: store1,
    query: {"type": "parent"},
            rootId: "root",
            rootLabel: "Groups",
            childrenAttrs: ["children"]
        });
        var treeObject = new dijit.Tree({
            model: treeModel
        }, "treeDiv")
        if (dijit.byId("fixedSubCategory") != null) {
                dom.byId("fixedSubCategory").appendChild(treeObject.domNode);
                treeObject.startup();
            }

通常,dom.byId()等在适当AMD模块的上下文中可见,例如:

define([ 'dojo/dom', ... ], function (dom, ...) {
    // do something with dom.byId
});

如果您正在以AMD格式编写模块(这是非常受鼓励的),请确保您确实将dojo/dom模块包括在依赖项列表中,并将该模块分配给工厂函数中的dom参数(如果您认为您已经在这样做了,请确保依赖项数组和函数参数顺序匹配)。那么它应该可以正常工作。

(此外,引用dijit.byId的适当方式是通过dijit/registry模块,而不是dijit全局。)

另一方面,看起来你的大多数其他代码根本没有真正使用AMD格式(例如dojo.datadijit.tree等)。虽然建议更新为AMD格式(而且你似乎一直在用domAttr在dojo中动态填充组合框中使用它),但与dom.byId等效的非AMD全局代码是dojo.byId

我想最简单的方法是使用组合框。

我们是这样管理的:"results"是对我们的街道形状文件进行查询的结果。

function streetsToCombobox(results){
    var adress;
    var values = [];
    var testVals={};
    var features = results.features;
    require(["dojo/_base/array","dojo/store/Memory","dijit/form/ComboBox"],    
    function(array,Memory,Combobox){        
       if (!features[0]) {
          alert(noDataFound);
       }
    else {
        array.forEach(features, function(feature, i){
            adress = feature.attributes.STRASSE;
 //Check for doublefeatures
            if (!testVals[adress]) {
                testVals[adress] = true;
                values.push({
                    name: adress
                });
            }
        });
        values.sort(SortByName);
        var dataItems = {
            identifier: 'name',
            label: 'name',
            items: values
        };
            storeStreet = new Memory({
                data: dataItems
            });
    }
var comboBox = new ComboBox({
    id: "MyCB",
    name: "street",
    value: "",
    store: storeStreet ,
    searchAttr: "name"
},"DomeNodeForBox");
});
}

要了解更多信息,Infos请仔细查看文档:http://dojotoolkit.org/reference-guide/1.10/dijit/form/ComboBox.html#dijit-表单组合框