Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ext-js [08/08/2018 10:27]
Anthony Arents [Editting an application]
ext-js [19/11/2018 12:04] (current)
Anthony Arents [ExtJS in java web projects]
Line 4: Line 4:
   * Download and Install Sencha Cmd 6   * Download and Install Sencha Cmd 6
   * Download and unzip the Ext JS 6 SDK (remember the path)   * Download and unzip the Ext JS 6 SDK (remember the path)
 +
 +==== Use the latest CMD version ====
 +<code>sencha upgrade</code>
 +==== Framework commercial version ====
 +The framework should be asked for : it needs to be downloaded using the support account by Torsten or Anthony.\\
 +Unpack the framework in an easy to use folder like
 +<code>~/ExtJS/ext-6.0.0/</code>
 +===== ExtJS in java web projects =====
 +Maven Web Project :\\
 +folder structure ''create /src/main/webapp/static if not available''.\\
 +\\
 +We create the application inside this static folder.
 +
 ===== To start a new Ext JS project ===== ===== To start a new Ext JS project =====
 Open your terminal or console window and issue these commands Open your terminal or console window and issue these commands
Line 10: Line 23:
 sencha app watch</code> sencha app watch</code>
 This will generate a skeleton app, ''sencha app watch'' will check for any changes made to css or js.  This will generate a skeleton app, ''sencha app watch'' will check for any changes made to css or js. 
- 
 ===== To take over an existing Ext JS project ===== ===== To take over an existing Ext JS project =====
 Open your terminal or console window and issue these commands *inside* the app folder : Open your terminal or console window and issue these commands *inside* the app folder :
Line 25: Line 37:
 Desktop code usually goes into ''<APPNAME>/classic/src'', stylechanges in ''<APPNAME>/classic/sass''\\  Desktop code usually goes into ''<APPNAME>/classic/src'', stylechanges in ''<APPNAME>/classic/sass''\\ 
 Mobile/Tablet code usually goes into ''<APPNAME>/modern/src'', stylechanges in ''<APPNAME>/modern/sass''\\ Mobile/Tablet code usually goes into ''<APPNAME>/modern/src'', stylechanges in ''<APPNAME>/modern/sass''\\
-Code which is universal (like models & stores) can be defined in ''<APPNAME>/app''+Code which is universal (like models & stores) can be defined in ''<APPNAME>/app''\\ 
 \\ \\
 You can only use “classic” extjs classes in the classic folder, & “modern” (touch) classes in the modern folder. You can only use “classic” extjs classes in the classic folder, & “modern” (touch) classes in the modern folder.
  
 +===== Setting loginscreen =====
 +change the mainview in app.js to load the login view
 +
 +<code>/*
 + * This file launches the application by asking Ext JS to create
 + * and launch() the Application class.
 + */
 +Ext.application({
 +    extend: 'Beraterchat.Application',
 +
 +    name: 'Beraterchat',
 +
 +    requires: [
 +        // This will automatically load all classes in the Beraterchat namespace
 +        // so that application classes do not need to require each other.
 +        'Beraterchat.*'
 +    ],
 +
 +    // The name of the initial view to create.
 +    mainView: 'Beraterchat.view.login.Login'
 +});</code>
 +===== Adding another view to the viewport =====
 +<code>Ext.Viewport.setActiveItem(Ext.create('CLASSNAME', {}));</code>
 +
 +===== Remove current view and show previous view =====
 +<code>Ext.Viewport.setActiveItem(Ext.Viewport.down('PREVIOUSXTYPE'));
 +Ext.Viewport.remove(viewtoremove);</code>
 +===== Model =====
 +Models are GLOBAL like this, I only define a store like this if it's used in more then 1 view.
 +<code>Ext.define('Merke.model.Category', {
 +    extend: 'Ext.data.Model',
 +
 +    fields: [
 +        {
 +            type: 'auto',
 +            name: 'id'
 +        },
 +        {
 +            type: 'string',
 +            name: 'name'
 +        },
 +        {
 +            type: 'int',
 +            name: 'assignType'
 +        },
 +        {
 +            type: 'string',
 +            name: 'type'
 +        }
 +    ],
 +    
 +    /*proxy: {
 +        type: 'rest',
 +        url: '/categories',
 +        headers: {
 +            'accept': 'application/json'
 +        },
 +        writer: {
 +            clientIdProperty: 'clientId'
 +        },
 +        reader: {
 +            rootProperty: 'data'
 +        }
 +    }*/
 +    proxy: {
 +        type: 'ajax',
 +        url: Global.serverUrl + '/chat',
 +        extraParams: {
 +             action:'getChatMessages',
 +        },
 +        headers: {
 +            'accept': 'application/json'
 +        },
 +        writer: {
 +            clientIdProperty: 'clientId'
 +        },
 +        reader: {
 +            rootProperty: 'data'
 +        }
 +    }
 +
 +});
 +</code>
 +===== Store =====
 +Stores are GLOBAL like this, I only define a store like this if it's used in more then 1 view.
 +<code>Ext.define('Merke.store.Category', {
 +    extend: 'Ext.data.Store',
 +    alias: 'store.category',
 +    
 +    config: {
 +        requires: ['Merke.model.Category'],
 +        model: 'Merke.model.Category',
 +        remoteSort: true
 +    }
 +});</code>
 +===== ViewModel =====
 +viewmodels (class or config) can be used to make binding of data easier :
 +<code>viewModel: {
 +   data: {
 +      myId: 1337,
 +      myCustomerId: 666
 +   },
 +   stores: {
 +      textstore: {
 +         type: 'chatmessagestore',
 +         filters: [{
 +                        id: 'beraterId',
 +                        property: 'beraterId',
 +                        value: '{myId}'
 +                    }, {
 +                        id: 'mandantId',
 +                        property: 'mandantId',
 +                        value: '{myCustomerId}'
 +                    }]
 +      }
 +   }
 +}</code>
 +
 +===== List of data =====
 +<code>{
 +   xtype: 'list',
 +   bind: {
 +       store: '{textstore}'
 +   }
 +}</code>
 +===== Multiple builds =====
 +in app.json there's a default config for builds :
 +<code>"builds": {
 +        "classic": {
 +            "toolkit": "classic",
 +            "theme": "theme-triton",
 +            "sass": {
 +                "generated": {
 +                    "var": "classic/sass/save.scss",
 +                    "src": "classic/sass/save"
 +                }
 +            }
 +        },
 +
 +        "modern": {
 +            "toolkit": "modern",
 +            "theme": "theme-material",
 +            "sass": {
 +                "generated": {
 +                    "var": "modern/sass/save.scss",
 +                    "src": "modern/sass/save"
 +                }
 +            }
 +        }
 +    },</code>
 +It's possible to add customer specific builds, just copy modern or classic + add your extra config (pwa overrides for example).\\
 +making a build with the newly defined build is then
 +<code>sencha app build <customer></code>
 +===== Styling an application =====
 +Modern global CSS variables : https://docs.sencha.com/extjs/6.6.0/modern/Global_CSS.html\\ 
 +Classic global CSS variables : https://docs.sencha.com/extjs/6.6.0/classic/Global_CSS.html\\ 
 +\\ 
 +The simplest styling using variables & mixins. Add a "var" folder under "sass", make a file called Application.scss.\\
 +Overriding $base-color goes a long way ;-).
 +\\ 
 +
 +To change a button's color it's recommended to make use of the mixins\\ (example of classic mixins, note usage of different button uis depending on position which is a classic thing) :
 +<code>
 +@include extjs-button-small-ui(
 +$ui: 'action',
 +$glyph-color: #000,
 +$color: #000,
 +$inner-border-width: 0,
 +$border-color: #F7C000,
 +$background-color: #F7C000
 +);
 +
 +@include extjs-button-toolbar-small-ui(
 +$ui: 'mandantselect',
 +$glyph-color: #000,
 +$color: #000,
 +$inner-border-width: 0,
 +$border-color: #eeeeee,
 +$background-color: #eeeeee
 +);
 +</code>
 +
 +===== Pushnotifications =====
  
 +[[ext-js:push|ExtJs 6.6 Push Notifications]]