71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
modules.define(
|
|
'y-block-mixin',
|
|
['inherit', 'y-event-emitter', 'y-event-manager'],
|
|
function (provide, inherit, YEventEmitter, YEventManager) {
|
|
|
|
var YBlockMixin = inherit(YEventEmitter, {
|
|
__constructor: function (blockInstance, options) {
|
|
this._block = blockInstance;
|
|
this._options = options;
|
|
this._eventManager = new YEventManager(this);
|
|
},
|
|
|
|
_getBlock: function () {
|
|
return this._block;
|
|
},
|
|
|
|
_bindTo: function (emitter, event, callback) {
|
|
this._eventManager.bindTo(emitter, event, callback);
|
|
return this;
|
|
}
|
|
}, {
|
|
|
|
/**
|
|
* Возвращает имя миксина.
|
|
* Этот метод следует перекрывать при создании новых миксинов.
|
|
*
|
|
* @static
|
|
* @returns {String|null}
|
|
*
|
|
* @example
|
|
* provide(inherit(YBlockMixin, {}, {
|
|
* getMixinName: function() {
|
|
* return 'auto-focus';
|
|
* }
|
|
* });
|
|
*/
|
|
getMixinName: function () {
|
|
return 'y-block-mixin';
|
|
},
|
|
|
|
fromBlock: function (blockInstance, options) {
|
|
var mixinName = this.getMixinName();
|
|
var mixins = this._getMixinsFromDomNode(blockInstance.getDomNode());
|
|
if (!mixins[mixinName]) {
|
|
var Mixin = this;
|
|
mixins[mixinName] = new Mixin(blockInstance, options);
|
|
}
|
|
return mixins[mixinName];
|
|
},
|
|
|
|
/**
|
|
* Возвращает инстанции миксинов для данного DOM-элемента.
|
|
*
|
|
* @param {jQuery} domNode
|
|
* @param {Boolean} [skipCreating]
|
|
*/
|
|
_getMixinsFromDomNode: function (domNode, skipCreating) {
|
|
var data = domNode.data(this._mixinsStorageKey);
|
|
if (!data && !skipCreating) {
|
|
data = {};
|
|
domNode.data(this._mixinsStorageKey, data);
|
|
}
|
|
return data;
|
|
|
|
},
|
|
|
|
_mixinsStorageKey: 'y-block-mixin'
|
|
});
|
|
provide(YBlockMixin);
|
|
});
|