2014-10-11 2 views
1

После этого example Я пытаюсь написать плагин, или лучше поставить: расширение, на kendoGrid. Моя цель состоит в том, чтобы оборудовать kendoGrid дополнительным параметром конструкции, например: функция обратного вызова с именем format, которая обеспечила бы пользовательское условное форматирование при изменении данных.Расширение kendoGrid с дополнительным параметром конструктора

Что меня озадачивает, так это то, что на самом деле на самом деле создается новый виджет, в то время как конструкторы kendoGrid останутся нетронутыми и просто примут новый параметр. Я хотел бы избежать изменения всех вызовов от kendoGrid до kendoMyPlugin. Это возможно?

ответ

2

Пример из вашей ссылки расширяет класс Widget. Это базовый класс, из которого выводятся все виджеты Kendo UI. В вашем случае вы хотите расширить сетку Keno и добавить функциональность оттуда. Вы не можете изменить подпись метода init, потому что это вызвано внутренними компонентами Kendo, но вы можете легко добавить настраиваемый параметр, чтобы делать то, что вам нужно. Базовая модель:

(function ($, undefined) { 

    if (!kendo.ui.MyGrid) {  

     var base = kendo.ui.Grid; 

     var MyGrid = base.extend({ 

      init: function (element, options) { 

       // Call the base class's init. 
       base.fn.init.call(this, element, options); 

       // Add initialization... 
       this.myField1 = options.myOption1; 

       // If you want to watch changes in the dataSource 
       // attached to the grid, you could use this. Of 
       // course you don't even need to subclass to do this 
       // but you get the point. 
       this.dataSource.bind("change", function(e) { 
        if (that.options.myCallback) { 
         that.options.myCallback.call(that, e); 
        } 
       }; 
      }, 

      // Add default options... 
      options: { 
       myOption1: "Hello", 
       myOption2: "World", 
       myCallback: undefined, 
      } 

      // Add events... 
      events: [ 
       "myEvent1", 
       "myEvent2" 
      ], 

      // Add fields... 
      myField1: "Goodbye", 

      // Add methods... 
      myMehod: function (a, b, c) { 
       // Do something... 
      } 
     } 

     // Register the new widget. 
     kendo.ui.plugin(MyGrid); 
    }  
})(jQuery); 

MyGrid теперь обладает всеми возможностями грида плюс ваши дополнительные функции. Затем вы создаете новый экземпляр так же, как и с сеткой.

$("#someElement").kendoMyGrid({ 
    // Add options for standard kendo Grid and your new options... 
    myCallback: function (e) { 
     alert(e.action); 
    } 
}); 
+0

С уважением, moomoo! В этот самый момент я не могу проверить код, но я ценю ваш ответ. Глядя на это, я буду беспокоиться: происходит ли событие 'change'' dataSource' перехватывается и останавливается или распространяется, так что пользователь все равно может назначить ему свои собственные обработчики в конструкторе? – user776686

+0

Да, это работает как шарм! Мне даже не нужно перефразировать конструктор до 'kendoMyGrid' - по умолчанию« kendoGrid »по-прежнему работает. – user776686

+0

Прохладный! Я фактически добавил почти 4K строк кода в Grid (GridEx, я называю это), чтобы делать всевозможные вещи. Не то, что я могу поделиться. – moomoo