我是Dojo世界的新手,所以这可能是一件令我困难的事情。
我有以下代码(删除不相关的东西):
define(["dojo/_base/declare", "dojo/fx", "dojo/on"],
function (declare, fx, on) {
return declare(null, {
executeTransition: function (continuation) {
var animation = fx.combine([
fx.slideTo({
duration: 1200,
node: this.node1, // node1 will be a valid node at the moment of execution
left: -this.node1.offsetWidth
}),
fx.slideTo({
duration: 1200,
node: this.node2, // node2 will be a valid node at the moment of execution
left: 0
})
]);
on(animation, "End", continuation);
animation.play();
}
});
}
);
按原样执行我的代码时,on
行无法说Uncaught Error: Target must be an event emitter
。但作为一个动画,它应该是一个事件发射器吗?
我尝试解决问题的一些背景研究:
reference guide to dojo.fx将fx.combine
的结果视为任何其他动画。 API reference for dojo.fx仅表示它返回实例。
无论如何,Dojo 1.8 animation tutorial有一个我试图执行的相同例子,除了它后来将fx.combine的结果包装在fx.chain中(我不需要 - 或者我?)。
所以,我的问题是:使用Dojo 1.8,如何并行运行两个动画并在完成后执行一些代码?
答案 0 :(得分:0)
在阅读完问题后,我决定进行调查。我发现,"目标必须是事件发射器" 错误仅在尝试从组合动画中捕获 onEnd 事件时发生。链式动画不会出现这种情况。
经过一番挖掘后,我注意到组合动画似乎有一个_connects属性,这表明它使用旧的折旧"dojo/_base/connect"功能。这可能是Dojo中的一个错误(或者更确切地说是在最近的升级中错过的代码)。看了Dojo Trac但还没找到任何东西,可能会为这个开一张新票。
我可以想到两种解决方法:
connect.connect(animation, "onEnd", function(){
// connect == dojo/base/connect
})
直接连接到onEnd事件(或使用"dojo/aspect")
animation.onEnd(function(){
});
这两种方式都不是理想的,因为您可能需要在将来某个日期将代码更改为dojo/on版本。
编辑:看起来其他人已将此报告为错误see here。