@antv/g6
Version:
graph visualization frame work
106 lines (92 loc) • 2.78 kB
JavaScript
var Util = require('../util');
var Behavior = {};
/**
* 注册行为的方法
* @param {string} type 行为类型,外部引用指定必须,不要与已有行为类型重名
* @param {object} behavior 行为内容,包含元素详见augment内容
*/
Behavior.registerBehavior = function (type, behavior) {
if (!behavior) {
throw new Error('please specify handler for this behavior:' + type);
}
var base = function base(cfg) {
var self = this;
Util.mix(self, self.getDefaultCfg(), cfg);
var events = self.getEvents();
if (events) {
var eventsToBind = {};
Util.each(events, function (handler, event) {
eventsToBind[event] = Util.wrapBehavior(self, handler);
});
this._events = eventsToBind;
}
};
Util.augment(base, {
/**
* 是否阻止行为发生,默认不阻止
* @return {boolean} 返回false时不触发行为
*/
shouldBegin: function shouldBegin() {
return true;
},
/**
* 是否阻止行为更新数据,更改视图
* @return {boolean} 返回false时更新数据
*/
shouldUpdate: function shouldUpdate() {
return true;
},
/**
* 是否阻止行为进入终止态
* @return {boolean} 返回false时阻止
*/
shouldEnd: function shouldEnd() {
return true;
},
/**
* 定义行为的事件监听handler,behavior内部会自动绑定事件。
* 例如: return { click: 'onClick' }, 内部会监听graph的click事件,触发this.onClick
*/
getEvents: function getEvents() {},
/**
* 绑定事件,默认绑定getEvents返回事件,不需要复写
* @param {object} graph 画布实例
*/
bind: function bind(graph) {
var events = this._events;
this.graph = graph;
Util.each(events, function (handler, event) {
graph.on(event, handler);
});
},
/**
* 解绑事件,多用于切换行为模式,默认解绑getEvents返回事件,复写bind时需要同时复写unbind
* @param {object} graph 画布实例
*/
unbind: function unbind(graph) {
var events = this._events;
Util.each(events, function (handler, event) {
graph.off(event, handler);
});
},
get: function get(val) {
return this[val];
},
set: function set(key, val) {
this[key] = val;
return this;
},
/**
* 定义自定义行为的默认参数,会与用户传入的参数进行合并
*/
getDefaultCfg: function getDefaultCfg() {}
}, behavior);
Behavior[type] = base;
};
Behavior.hasBehavior = function (type) {
return !!Behavior[type];
};
Behavior.getBehavior = function (type) {
return Behavior[type];
};
module.exports = Behavior;