Javascript 在dojo';组合框
我想实现一个建议组合框,它显示从我自己的web服务(使用restapi和jsonp)获取的建议。我发现Javascript 在dojo';组合框,javascript,combobox,dojo,dijit.form,Javascript,Combobox,Dojo,Dijit.form,我想实现一个建议组合框,它显示从我自己的web服务(使用restapi和jsonp)获取的建议。我发现ComboBox.store.root.children包含建议的数据,并在下面编写了代码。为了简单起见,我使用there数组,而不是从我的服务中获得建议。 问题是它看起来像是黑客攻击,有些功能不能正常工作。例如,我无法摆脱列表中的“搜索”短语。 你能推荐更优雅的解决方案吗 <head> <style type="text/css"> body,
ComboBox.store.root.children
包含建议的数据,并在下面编写了代码。为了简单起见,我使用there数组,而不是从我的服务中获得建议。
问题是它看起来像是黑客攻击,有些功能不能正常工作。例如,我无法摆脱列表中的“搜索”短语。
你能推荐更优雅的解决方案吗
<head>
<style type="text/css">
body, html { font-family:helvetica,arial,sans-serif; font-size:90%; }
</style>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"
djConfig="parseOnLoad: true">
</script>
<script type="text/javascript">
dojo.require("dijit.form.ComboBox");
</script>
<script type="text/javascript">
dojo.addOnLoad(function() {
var cb = dijit.byId("searchQuery");
var bufToClone = cb.store.root.children[0];
cb.store.root.children[0] = null;
var suggestions = ["AAA", "BBB", "CCC"];
dojo.connect(cb, "onKeyPress", function(event) {
var newval = cb.textbox.value;
dojo.forEach(suggestions, function(entry, i) {
var newVal = dojo.clone(bufToClone);
newVal.value = entry;
newVal.text = entry;
cb.store.root.children[i] = newVal;
});
});
});
</script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css"
/>
</head>
<body class=" claro ">
<select dojoType="dijit.form.ComboBox" id="searchQuery" name="searchQuery" class="sQ">
<option>
Search
</option>
</select>
</body>
正文,html{字体系列:helvetica,arial,无衬线;字体大小:90%;}
require(“dijit.form.ComboBox”);
dojo.addOnLoad(函数(){
var cb=dijit.byId(“搜索查询”);
var bufToClone=cb.store.root.children[0];
cb.store.root.children[0]=null;
风险值建议=[“AAA”、“BBB”、“CCC”];
连接(cb,“onKeyPress”,函数(事件){
var newval=cb.textbox.value;
forEach(建议,函数(条目,i){
var newVal=dojo.clone(bufToClone);
newVal.value=条目;
newVal.text=条目;
cb.store.root.children[i]=newVal;
});
});
});
搜寻
你在期待这个吗
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css"/>
<style type="text/css">
body, html { font-family:helvetica,arial,sans-serif; font-size:90%; }
</style>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"
djConfig="parseOnLoad: true">
</script>
<script type="text/javascript">
dojo.require("dijit.form.ComboBox");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.form.Button");
</script>
<script type="text/javascript">
var idg = 4;
dojo.addOnLoad(function() {
str = new dojo.data.ItemFileWriteStore({
data:{
identifier:'id',
label:'name',
items:[
{id:1,name:'me'},
{id:2,name:'you'},
{id:3,name:'stackoverflow'}
]
}
})
new dijit.form.ComboBox({
store:str,
name:"searchQuery",
onChange:function(){
alert(dojo.query("[name=searchQuery]")[0].value)
}
},"searchQueryHld")
});
</script>
</head>
<body class=" claro ">
<span id="searchQueryHld"></span>
<span dojoType="dijit.form.Button">
Add one option
<script type="dojo/method" event="onClick">
str.newItem({id:idg,name:'me'+idg})
idg++;
</script>
</span>
</body>
</html>
正文,html{字体系列:helvetica,arial,无衬线;字体大小:90%;}
require(“dijit.form.ComboBox”);
require(“dojo.data.ItemFileWriteStore”);
require(“dijit.form.Button”);
var-idg=4;
dojo.addOnLoad(函数(){
str=new dojo.data.ItemFileWriteStore({
数据:{
标识符:'id',
标签:'name',
项目:[
{id:1,名称:'me'},
{id:2,名字:'you'},
{id:3,名称:'stackoverflow'}
]
}
})
新dijit.form.ComboBox({
商店:str,,
名称:“searchQuery”,
onChange:function(){
警报(dojo.query(“[name=searchQuery]”[0]。值)
}
},“SearchQueryHold”)
});
添加一个选项
str.newItem({id:idg,name:'me'+idg})
idg++;
No。这不是我需要的,因为正如我所写的,我从我的Web服务下载建议,因此我不会将它们存储在文件中。我不确定restapi、jsonp术语。但我的猜测是,即使您从restapi或jsonp获取数据——从这些数据源获取数据后,将这些数据放入ItemFileWriteStore并在组合框上调用startup。对不起,如果我错了。