伙计们已经试了一个小时了。但是无法弄清楚为什么aspect.After/ being没有被调用。这是我的代码。
require([ "dojo/aspect", "dojo/on", "dojo/dom", "dojo/domReady!" ], function(
aspect, on, registry, dom) {
var callback = function() {
alert("called by click");
};
var callback2 = function() {
alert("called by click 2");
};
var my = {
clicking : on(dom.byId("alertButton"), "click", callback)
};
aspect.after(my, "clicking", callback2);
});提前谢谢。
发布于 2013-09-04 16:33:18
也许你混淆了用法。
aspect.after或aspect.before,它是根据这些方法执行额外的功能。而不是行动。
示例:
aspect.after(my, "clicking", callback2);
任何调用my.clicking()的地方,它都会运行callback2。
运行on(dom.byId("alertButton"), "click", callback)时,对于执行附加函数,不是。
我的英语不好,解释起来很简单:
function a(){
alert();
}
my.clicking = function(){ a(); };
aspect.after(my, "clicking", callback2);
//equals to
my.clicking = function(){ a(); callback2(); };
//but not equals to
function a(){
alert();
callback2();
}发布于 2013-09-04 17:29:25
如果你想基于一个动作来添加额外的功能,你可以尝试这样做:
<input type="button" id="alertButton" value="click me" />
<input type="text" id="textboxMessage" value="x" />
<script>
dojo.require("dojo.aspect");
dojo.require("dojo.on");
dojo.require("dojo.dom");
var handler = {};
handler.alertClick = function(){ console.log('first callback'); };
handler.msgBoxChange = function(){ console.log('a textbox value changed'); };
handler.serverListChg = function(){ console.log('dropdown menu selected'); };
handler.additional = function(){ console.log('Additional callback'); };
dojo.aspect.after(handler, "alertClick", handler.additional, true);
dojo.on(dojo.byId('alertButton'), "click", handler.alertClick);
dojo.on(dojo.byId('textboxMessage'), "change", handler.msgBoxChange);
</script>在本例中,将在handler.alertClick之后追加操作handler.additional
https://stackoverflow.com/questions/18608054
复制相似问题