Пользовательский интерфейс OOjs: Как получить ссылку на инструмент из ToolFactory или панели инструментов, определенных группой

Предполагается, что OOjs UI - это библиотека, которая позволяет быстро создавать интерфейсные веб-приложения, которые работают согласованно во множестве браузеров.

Я хотел бы создать панель инструментов, состоящую из нескольких групп (здесь просто: a-group) и я борюсь за фильтрацию инструментов по группам, или, точнее, за фильтрацию ссылок на экземпляры инструментов по названию группы.

var toolFactory = new OO.ui.ToolFactory(),
    toolGroupFactory = new OO.ui.ToolGroupFactory(),
    toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, { actions: true } );

function doSthOnToolsByGroup( groupName ) {
    // Get a string[] consisting of tool names
    var tools = toolFactory.getTools( [ { group: groupName } ] );
    tools.forEach( function( toolName ) {
        // Now I'd like to get a reference to the
        // tool, instead I am getting a static reference
        // to the constructor
        var tool = toolFactory.lookup( toolName );
        // can't call 'setActive' on tool,
        // although tool.prototype.setActive is defined
    } );
}


function ATool() {
     ATool.parent.apply( this, arguments );
}
OO.inheritClass( ATool, OO.ui.Tool );

$.extend( ATool.static, {
    name: 'a-tool-name',
    icon: 'some-icon',
    title: 'the title',
    group: 'a-group'
} );

ATool.prototype.onSelect = function () {
     doSthOnToolsByGroup( 'a-group' );
};

toolFactory.register( ATool );

// The same for BTool, just BTool belonging to 'a-group'
// ...

toolbar.setup( ... );
// append toolbar to DOM
toolbar.initialize();
toolbar.emit( 'updateState' );
// and now click a toolbar button to trigger `doSthOnToolsByGroup`

0 ответов

Другие вопросы по тегам