我正在使用dojo 1.7开发并收到错误..我的目标是将项目从一个多选框移动到另一个。页面很长,所以我只复制了相关的部分。
这是我的头js代码,问题出现在dojo.ready之后。变量“newStore”很有效,所以我知道它正在执行。这是dojo.query(“button.switch”)似乎是个问题。我得到的萤火虫错误是
dojo.query("button.switch").connect is not a function
并在页面加载时抛出此错误。代码是....
<script type="text/javascript">
require(["dijit/dijit"]);
require(["dojo/parser"]);
require(["dijit/layout/BorderContainer"]);
require(["dijit/layout/ContentPane"]);
require(["dijit/layout/AccordionContainer"]);
require(["dijit/layout/TabContainer"]);
require(["dijit/form/CheckBox"]);
require(["dijit/form/Button"]);
require(["dijit/form/ComboBox"]);
require(["dijit/form/NumberTextBox"]);
require(["dijit/form/SimpleTextarea"]);
require(["dijit/form/TextBox"]);
require(["dijit/form/Textarea"]);
require(["dijit/form/MultiSelect"]);
require(["clipart/ArrowLeft"]);
require(["clipart/ArrowRight"]);
require(["dijit/form/FilteringSelect"]);
require(["dijit/form/RadioButton"]);
require(["dijit/form/Select"]);
require(["dojox/layout/GridContainer"]);
require(["dojo/data/ItemFileReadStore"]);
require(["dijit/Tree"]);
require(["dojo/ready"]);
dojo.ready(function(){
var newStore = new dojo.data.ItemFileReadStore({
url: "http://0:3000/sample/sample_name"
});
dijit.byId('sc_sample_name').set('store',newStore);
dojo.query("button.switch")
.connect("onclick",function(e){
switch(e.target.id.toString()){
case "left" : dijit.byId("at2").addSelected(dijit.byId("at1")); break;
case "right" : dijit.byId("at1").addSelected(dijit.byId("at2")); break;
}
});
});
</script>
这是一个页面加载问题,这就是为什么我不包含HTML(这是巨大的)。以前有人见过这种行为吗?珍妮
答案 0 :(得分:3)
我认为您正在加载baseless dojo,即您的dojoConfig
/ data-dojo-config
有一个选项async:true
,它将Dojo切换为 baseless 模式版本1.7。
使用query("button.switch").on("click", function(e) { ...})
代替connect
:
require([
"dojo/ready",
"dojo/query"
], function(
ready,
query
) {
ready(function() {
query("button.switch").on("click", function(e) {
console.log(e.target.id);
});
});
});
或者不要切换到 baseless 模式。
在此jsFiddle中自行尝试:http://jsfiddle.net/phusick/LMdBd/,将async: true
更改为async: false
或完全删除它,connect
将有效: