0

当我用 指定事件的默认函数时,为什么它不执行defaultFn

var node = Y.one(".foo");

node.publish("myEvent", {
    defaultFn: function () {
        //I don't understand why this doesn't execute
        //I expect it to execute after my on listener
        //and before my after listener
        Y.log("In default function");
    }
});

node.before("myEvent", function () {
    Y.log("In before listener");
 });
node.on("myEvent", function () {
    Y.log("In on listener");
});
node.after("myEvent", function () {
   Y.log("In after listener");
});

node.fire("myEvent");

JSFiddle:http: //jsfiddle.net/steaks/rUacD/

4

1 回答 1

1

您的 jsfiddle 显示您正在加载node。要拥有事件,您必须加载其中一个事件模块。碰巧的是,您的代码在调用 时失败publish,事件提供的第一个方法是它找到的。

通常,检查 API 文档以查找失败的方法并查看哪个模块提供它们(方法标题下方的“继承自”)并确保已加载相应的模块。

-- 根据较新的 JSFiddle 更新:

添加emitFacade: true到已发布事件的配置中。YUI 会自动为继承自其他类的类执行此操作,Base但不会为其他类执行此操作。例如Node,您必须明确添加该选项。

于 2013-08-09T06:45:29.970 回答