This commit is contained in:
Wei Wei 2016-08-23 15:04:53 +08:00
Родитель 20b5ab95c0
Коммит e4bea42dc0
3 изменённых файлов: 33 добавлений и 11 удалений

Просмотреть файл

@ -1 +1,8 @@
import { register } from './item-register.js';
import { buildButtonItem } from './button.js';
register('button', buildButtonItem);
export { register } from './item-register.js';
export { Toolbar } from './toolbar.js';

24
js/item-register.js Normal file
Просмотреть файл

@ -0,0 +1,24 @@
import _ from 'underscore';
const itemBuilders = {};
export function register(name, builder) {
if (_.has(itemBuilders, name)) {
throw new Error('Duplicated registration');
}
if (!_.isFunction(builder)) {
throw new Error('Item builder has to be a function');
}
itemBuilders[name] = builder;
}
export function getItemBuilder(name) {
if (!_.isFunction(itemBuilders[name])) {
throw new Error('Unknown item type');
}
return itemBuilders[name];
}

Просмотреть файл

@ -1,13 +1,9 @@
import _ from 'underscore';
import Backbone from 'backbone';
import toolbarTemplate from './toolbar.jade';
import { buildButtonItem } from './button.js';
import { getItemBuilder } from './item-register.js';
import './toolbar.less';
const builders = {
button: buildButtonItem,
};
function mergeEvents(dest, src) {
const result = dest || {};
@ -38,10 +34,6 @@ function normalizeItem(item) {
const error = new Error('Invalid toolbar item');
error.item = item;
throw error;
} else if (!_.isFunction(builders[item.type])) {
const error = new Error('Unknown item type');
error.type = item.type;
throw error;
}
return item;
@ -68,7 +60,7 @@ export class Toolbar extends Backbone.View {
_buildItems() {
return _.reduce(this._state.items, (memo, item, index) => {
const toolbarItemBuilder = builders[normalizeItem(item).type];
const toolbarItemBuilder = getItemBuilder(normalizeItem(item).type);
const { events, html } = toolbarItemBuilder(_.defaults({
tabindex: index === 0 ? 0 : -1,
}, item));
@ -98,4 +90,3 @@ export class Toolbar extends Backbone.View {
}
}