Fujitsu HPC Gateway Addon - Как использовать отдельные файлы - PullRequest
0 голосов
/ 06 февраля 2019

Как я могу разделить логику для HPC Gateway Addon на отдельные файлы?т.е. я хотел бы сделать что-то вроде этого:

Main.js

Ext.define('App.view.main.Main', {
    extend: 'Ext.tab.Panel',
    items: [{
        title: 'Stuff',
        xtype: 'stuff',
        iconCls: 'x-fa fa-object-group'
    }, {
        title: 'About',
        xtype: 'about',
        iconCls: 'x-fa fa-info-circle',
    }]
});

Stuff.js

Ext.define('App.widget.Stuff', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.stuff',
    html: '<h1>Stuff'
});

About.js

Ext.define('App.widget.About', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.about',
    html: '<h1>Version: x.y.z'
});

Согласно официальным документам fujitsu для создания дополнения , нет примеров разделения вашей логики на несколько файлов,только два монолитных файла, которые содержат представление и логику контроллера:

appModule.js

Ext.define('desktop.addons.app_abcdef12.view.appModule', {
    extend: 'desktop.core.utils.Module',
    requires:[],

    /**
     * Create window
     * @param taskBar the task bar
     * @returns {desktop.core.view.utils.ModuleView} the module view
     */
    createWindow: function (taskBar) {
        var me = this;
        return Ext.create('desktop.core.view.utils.ModuleView', {
            title: me.title,
            iconCls: me.iconCls,
            stateId: 'app-module',
            name: 'app-window',
            taskBar: taskBar,
            multipleView: false,
            width: 320,
            height: 150,
            items:me.buildItems(),
            buttons: [
            ]
        });
    },

    /**
     * Build items
     * @returns {{xtype: string, layout: {type: string, align: string}, items: *[]}} items in json format
     */
    buildItems:function(){
        return {
            xtype: 'panel',
            layout: 'center',
            items: [{
                xtype: 'textfield',
                name: 'value',
                fieldLabel: desktop.core.utils.Symbols.getText('app_abcdef12.textfield.input')+" *",
                allowBlank:false,
                listeners: {
                    change: function(textfield, newValue){
                        var window = textfield.up('window');
                        window.fireEvent('textfieldChanged', textfield, newValue);
                    }
                }
            }]
        };
    }
});

appController.js

Ext.define('desktop.addons.app_abcdef12.controller.appController', {
    extend: 'desktop.core.controller.abstract.AbstractToriiController',
    requires: [],
    control: {
        'window[name=app-window]': {
            textfieldChanged: 'performTextfieldChanged'
        }
    },

    performTextfieldChanged: function (textfield, newValue) {
        if (Ext.isEmpty(newValue)) {
            textfield.up('window').down('button[name=save]').disable();
        } else {
            textfield.up('window').down('button[name=save]').enable();
        }
    }
});

Когда я пытался создать что-то вроде desktop.addons.app_abcdef12.view.Stuff с xtype widget.stuff, я разбил экземпляр HPC, и мне пришлось удалить аддон, указанный в mongodb, и перезапустить службы.Это серьезно уменьшает количество раз, когда я могу использовать метод проб и ошибок, чтобы выяснить, что работает.

Кто-нибудь делал это раньше?

1 Ответ

0 голосов
/ 11 февраля 2019

В конце концов мне не удалось заставить что-либо работать, используя xtype, но я сделал это при непосредственном использовании Ext.create:

appModule.js

buildItems:function(){
    return {
        xtype: 'tabpanel',
        items: [
            Ext.create('desktop.addons.app_abcdef12.view.Stuff'),
            Ext.create('desktop.addons.app_abcdef12.view.About'),
        ]
    };
}

Stuff.js

Ext.define('desktop.addons.app_abcdef12.view.Stuff', {
    title: 'Stuff',
    extend: 'Ext.panel.Panel',
    iconCls: 'x-fa fa-id-card',
    html: '<h1>Stuff'
});

About.js

Ext.define('desktop.addons.app_abcdef12.view.About', {
    title: 'About',
    extend: 'Ext.panel.Panel',
    iconCls: 'x-fa fa-info',
    html: '<h1>About'
});
...