1

我正在使用 $.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");
             }
         });

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

4

1 回答 1

1

绑定到事件on()应该可以工作,然后该事件可能未命名painted

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

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

self.element.on(self.widgetEventPrefix + "painted", function(e) {
    alert("Got painted in child via element.on");  // Should be called.
});
于 2012-09-12T19:48:02.480 回答