我为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.data
、dijit.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-表单组合框