如何使用jQuery UI从继承的widget插件中添加父事件处理程序?

时间:2012-09-12 19:32:47

标签: jquery-ui

我正在使用$ .widget工厂扩展jQuery UI小部件。在这个特殊情况下,我将继承Wijmo的wijlinechart。我需要在孩子班级内回应wijlinechart的“画”事件。

考虑一下:

         $.widget("bw.wijlinechartcursor", $.wijmo.wijlinechart, {
             _create: function () {
                 var self = this;
                 $.wijmo.wijlinechart.prototype._create.apply(self, arguments);

                 self.element.on("painted", function (e) {
                     alert("Got painted in child via element.on"); // Doesn't get called.
                 });

                 // This works, but blows away the client code's handler (below)
                 self.options.painted = function (e) {
                    alert("Got painted in child class via options.painted!");
                 }                   

             },

             _painted: function () {
                 alert("Got painted in child via _painted");  // Doesn't get called.
             }
         });

         $("#mywijlinechartcursor").wijlinechartcursor({
             // ... stuff...
             painted: function (e) {
                 alert("Got painted in client code");
             }
         });

那么在继承的父类_trigger的子类中处理事件的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

使用on()绑定到事件应该有效,然后该事件可能不会被命名为painted

每个小部件都有自己的事件前缀,默认为小部件的名称。如果基本窗口小部件未覆盖此默认值,则该事件将命名为wijlinechartpainted

在任何情况下,前缀都在小部件的widgetEventPrefix属性中可用,因此您可以写:

self.element.on(self.widgetEventPrefix + "painted", function(e) {
    alert("Got painted in child via element.on");  // Should be called.
});