dojo方面没有定义,不明白为什么

时间:2013-04-09 08:05:13

标签: dojo undefined aspect

我想从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){...}的简单翻译对我不起作用,因此仍然需要旧样式。

2 个答案:

答案 0 :(得分:3)

尝试使用:

dojo.aspect.after(...);

而不是

aspect.after(...);

不要停留在下一个功能! : - )

如果这不能立即起作用,请尝试以全局方式加载方面(使用点,而不是斜线):

dojo.require("dojo.aspect");

也有可能,旧的dojo与“/”不兼容,并且它只适用于点!

来源:

http://livedocs.dojotoolkit.org/dojo/require

修改

这是一个基于你的小提琴的工作小提琴:

http://jsfiddle.net/9Xdv2/

您的代码的主要问题是您没有解析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);
           });
    });
});