我拼命尝试从我写的课程中触发一个事件。我在我的 YUI 小部件中使用这个类,我希望我的 YUI 小部件响应触发的事件。我知道事件冒泡是如何工作的,所以这里的代码工作得很好:
YUI().use('event-custom', 'node', function (Y) {
function Publisher(bubbleTo) {
this.addTarget(bubbleTo);
this.publish("testEvent", {
emitFacade: true
});
this.fire("testEvent");
}
function BubbleTarget() {
this.on("testEvent", function (e) {Y.log("Bubbling in Test.js succeed!")});
var newPublisher = new Publisher(this);
}
// To fire events or be a bubble target, augment a class with EventTarget
Y.augment(Publisher, Y.EventTarget);
Y.augment(BubbleTarget, Y.EventTarget);
var bubbleTarget = new BubbleTarget();});
但是,当我尝试将这个概念应用到我的 Widget 时,我非常失败。
YUI.add("SlideShow", function(Y) {
function SlideShow(config) {
SlideShow.superclass.constructor.apply(this, arguments);
}
SlideShow.NAME = "SlideShow";
Y.extend(SlideShow, Y.Widget, {
initializer: function() {
Y.log("Widget loaded!");
this.on("testEvent", function () {
Y.log("This should, but won't appear despite how hard I try!");
});
},
renderUI: function(){
var testSlide = new Slide("text", this);
}
});
Y.SlideShow = SlideShow;
function Slide(sendTo)
{
this.addTarget(sendTo);
this.publish("testEvent", {
defaultFn: function(){Y.log('Event published.')},
emitFacade: true
});
this.fire("testEvent");
}
Y.augment(Slide,Y.EventTarget, true, null, {emitFacade: true});
}, "0.0.1", {requires:["widget","event-custom","node","anim"]});
Chromium 中的对数输出为:
- 在 Test.js 中冒泡成功!
- 小部件已加载!
- 活动发布。
似乎我真的很怀念关于小部件的一些重要内容。请帮助我以便更好地理解这个主题。