2017-01-19 3 views
0

Можно ли связать определенное поведение с программным обеспечением dijit?Додзе: как улучшить диджит?

I.e. скажем, я использую этот dijit/form/NumberSpinner во всем моем проекте. Теперь я хочу иметь onFocus: function() { console.log('hi') } на всех NumberSpinners.

Обычно я хотел бы сделать это:

  … new NumberSpinner({ 
       onFocus: function() { console.log('hi'); }, 
       … 
      }); 

на каждом элементе. Не существует способа связать это как поведение по умолчанию для каждого экземпляра NumberSpinner?

Thanks

ответ

1

Я наконец нашел, как это сделать.

Использование Продлить

так:

lang.extend(NumberSpinner, { 
    _onFocus: function() { console.log('hi'); } 
}); 

Работа пример на JSBIN: https://jsbin.com/sesotolove/2/edit?html,output

Ссылка: https://dojotoolkit.org/reference-guide/1.7/dojo/extend.html

Использование Prototype

То же может быть достигнуто только перезапись p rototype так:

NumberSpinner.prototype._onFocus: function() { console.log('hi'); } 
1

Опцион будет создавать свои собственные компоненты, которые распространяется от NumberSpinner и перезаписать/добавить все функции и атрибуты, которые вы хотите.

Пример:

приложения/CustomNumberSpinner.js

define([ 
    'dojo/_base/declare', 
    'dijit/form/NumberSpinner' 
], function(
    declare, 
    NumberSpinner 
) { 

    // The declare and the references passed in the array on the next line defines what you are extending 
    return declare([NumberSpinner], { 

    /* Add all functions/props that you want in this object */ 

    onFocus: function() { 
     console.log('Hi, this is a onFocus event being handled'); 
    }  

    }); 

}); 

После кодирования настроенного компонента, вам просто нужно импортировать модуль, где вы хотите использовать его и создать его экземпляр, как вы могли бы сделать с вами использовали DefaultSpinner по умолчанию, но тогда вам не нужно было бы передавать реквизиты/функции, которые вам нужны в конструкторах args).

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