我想从dojo 1.7更新到1.8.3所以我必须替换dojo.connect命令。
开关:
< div id="universalPushSwitch" data-dojo-type="dojox.mobile.Switch" style="float:right" class="mblSwRoundShape1"></div>
现在我有:
dojo.require("dijit/registry");
dojo.require("dojo/ready");
dojo.require("dojox/mobile/ListItem");
dojo.require("dojo/aspect");
dojo.ready(function(){
dojo.aspect.after(dijit.registry.byId("universalPushSwitch"), "onStateChanged",
function(newState){
alert(newState);
}
)});
Firebug说:“方面没有定义”
PS:我知道我不使用新的AMD加载器。这是一个古老的项目,我也是所有道场的新手。从dojo.require("x");dojo.require("y");
到require(["x","y"], function (x,y){...}
的简单翻译对我不起作用,因此仍然需要旧样式。
答案 0 :(得分:3)
尝试使用:
dojo.aspect.after(...);
而不是
aspect.after(...);
不要停留在下一个功能! : - )
如果这不能立即起作用,请尝试以全局方式加载方面(使用点,而不是斜线):
dojo.require("dojo.aspect");
也有可能,旧的dojo与“/”不兼容,并且它只适用于点!
来源:
http://livedocs.dojotoolkit.org/dojo/require
这是一个基于你的小提琴的工作小提琴:
您的代码的主要问题是您没有解析html。 dojo解析器将一些特定的html转换为“dojo javascript对象”!你经常使用那种html!你应该做的:
dojox.mobile.parser.parse();
一切都在jsfiddle中!
答案 1 :(得分:2)
由于您使用的是dojo 1.8.3并且一直在使用dojo 1.7,为什么不使用AMD语法而不是1.7之前的语法? 你可以这样做:
<div id="universalPushSwitch" data-dojo-type="dojox/mobile/Switch" style="float:right" class="mblSwRoundShape1"></div>
在你的js:
require(["dijit/registry",
"dojox/mobile/ListItem",
"dojo/aspect",
"dojo/parser",
"dojo/domReady!"
], function(registry, ListItem, aspect, parser){
parser.parse().then(function(instances){
aspect.after(registry.byId("universalPushSwitch"), "onStateChanged",
function(newState){
alert(newState);
});
});
});