2012-09-12 1 views
1

Я расширяю виджет jQuery UI, используя фабрику $ .widget. В этом конкретном случае я наследую от wijlinechart Wijmo. Мне нужно ответить на «раскрашенное» событие wijlinechart из моего дочернего класса.Как добавить родительский обработчик событий изнутри унаследованного плагина виджета с помощью jQuery UI?

Рассмотрим это:

  $.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'ed унаследованным родительского класса?

ответ

1

Привязка к событию с on() должна работать, то снова это событие, вероятно, не названо painted.

Каждый виджет имеет собственный префикс события, который по умолчанию соответствует имени виджета. Если ваш базовый виджет не переопределяет это значение по умолчанию, событие будет называться wijlinechartpainted.

В любом случае, префикс доступен в widgetEventPrefix собственности виджета, так что вы можете написать:

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

** Это сделало трюк ** спасибо - я просто был не соединяющее! точек с префиксом события. Получил это сейчас! – BrandonLWhite

+1

Удивительно, но «self.widgetEventPrefix» должен быть уменьшен до имени здания, потому что _trigger() делает имя события ** строчным ** (jQuery UI v.1.8.20): 'self.element.on (self .widgetEventPrefix.toLowerCase() + "paint", function() {}); ' Если бы я знал это раньше, я бы сэкономил несколько часов отладки через jQuery ... –

Смежные вопросы