Javascript 为什么我的Dojo交换机侦听器不工作?注册表未定义错误

Javascript 为什么我的Dojo交换机侦听器不工作?注册表未定义错误,javascript,events,dojo,aop,Javascript,Events,Dojo,Aop,我有一个id为“universalPushSwitch”的交换机我还有一个侦听器,如果交换机状态发生变化,它会发出警报: dojo.require("dijit/registry"); dojo.require("dojo/ready"); dojo.require("dojox/mobile/ListItem"); dojo.require("dojo/aspect"); dojo.ready(function(){ aspect.after(registry.byId("univers

我有一个id为“universalPushSwitch”的交换机我还有一个侦听器,如果交换机状态发生变化,它会发出警报:

dojo.require("dijit/registry");
dojo.require("dojo/ready");
dojo.require("dojox/mobile/ListItem");
dojo.require("dojo/aspect");

dojo.ready(function(){
  aspect.after(registry.byId("universalPushSwitch"), "onStateChanged", 
        function(newState){
        alert(newState);
    }
)});
但警报从未被触发。有人知道怎么了吗?

试试看

dojo.byId("universalPushSwitch") or dijit.registry.byId("universalPushSwitch")
而不是

registry.byId("universalPushSwitch")

firebug说“注册表未定义”,您使用的是什么版本的Dojo?require函数中的正斜杠表示版本1.7+。如果是这种情况,您使用不推荐的
dojo/require
模块而不是新的AMD加载程序是否有特殊原因?要按原样修复代码,您可以尝试设置
dojo.require(“dijit/registry”)
调用
registry
变量的值,或者只使用全局
dijit.registry
(在这种情况下不需要它)。+1哪个版本的dojo。我想从dojo 1.7更新到1.8.3。我知道,我不使用新的AMD装载机。这是一个老项目,我对所有dojo的东西都是新手。来自dojo.require(“x”)的简单翻译;dojo.require(“y”);对于require([“x”,“y”],函数(x,y){…}对我不起作用,因此仍然存在旧的require.dojo.byId修复了注册表问题,但现在它表示“方面未定义”。我为此打开了一个新问题:我将dojo.byId更改为dijit.registry.byId,以便返回小部件而不是DOM对象。哦,我在帖子中忘记了byId。查看我对方面问题的另一个回答如果使用传统语法,那么所有内容都在dojo、dijit或dojox全局名称空间中。您应该使用dijit.aspect.after rate不仅仅是外表。在。。。