1. #1
    Sencha User
    Join Date
    Feb 2010
    Posts
    357
    Vote Rating
    4
    maneljn is on a distinguished road

      0  

    Default How to build mvc app ?

    How to build mvc app ?


    Sencha Extjs 4.2.0.663
    Sencha cmd 3.1.0.256

    I have an mvc application.

    I have generated the folder structure with sencha generate cmd: app, app/model, app/controller, etc...

    I do NOT use the sencha generate commands to create models, controllers, etc... I just create the file myself with text editor and put it in the correct folder.

    for example this is my app.js file
    Code:
    //@charset UTF-8
    
    // DO NOT DELETE - this directive is required for Sencha Cmd packages to work.
    //@require @packageOverrides
    // No usamos packages al compilar
    
    // Cargador dinamico
    //<debug>
    Ext.Loader.setConfig({        
        enabled: true,
        disableCaching: false,
        paths: {
            // Cesi.ux (Controles propios cesi)
            'Cesi.ux': 'libs/extjs_cesi/Cesi/ux',
            'Ext.ux': 'libs/ext/src/ux',
            'Ext': 'libs/ext/src',
            'esinube': 'app'
        } 
    });    
    ////</debug>
    
    // Variables globales
    var esinubeApp;
    var directProvider;
    
    Ext.require('Ext.direct.*', function() {
        // Cargar el proveedor de Ext.Direct con la configuracion de API
        directProvider = Ext.direct.Manager.addProvider(Ext.app.esinube_REMOTING_API);
    });
    
        // Definir la MVC app principal (esinubeApp)
        // Dominio de las clases js = esinube.xxxxxx
        Ext.application({
            name: 'esinube',
            autoCreateViewport: false,
            enableQuickTips: true,
            appFolder: 'app',
    
            requires: [
                //'Ext.direct.*',
                'Ext.data.*',
                'Ext.tip.*',
                'Ext.window.MessageBox',
                'Ext.util.Format',
                'Ext.layout.container.Border',
                // Requires forzados para la compilacion // Ejecución en desarrollo
                'Ext.toolbar.Paging',
                'Cesi.ux.layout.component.field.BoxSelectField',
                'Cesi.ux.form.field.BoxSelect'
            ],
            
            controllers: [
                // Controladores eSInube (app base)
                'escritorio', 'login', 'logout',
                'Main'
            ],        
    
            views: [
                'barraTareas','barraTareasMenuInicio',
                'escritorio',
                'gridBase',
                'iconosEscritorio',
                'itemMenuAplicaciones',
                'login', 'loginCambiarPassword', 'loginOlvidePassword', 'loginRecuperarPassword',
                'Main',
                'panelBase', 'panelSubfichaBase', 'tabpanelBase',
                'Viewport',
                'window', 'windowIframe'
            ],
            
            models: [
                'aplicacion'
            ],
    
            stores: [
                'aplicacionesPermitidas', 'aplicacionesPermitidasFavoritas'
            ],
        
            launch: function() {
                var me = this;
        
                // Guardar el objeto aplicacion en una variable global
                esinubeApp = me;
    
                // Añadir un listener al direct manager para que analice todos los datos que llegan y 
                // si vienen con el requiereLogin = true, abrir ventana de login.
                directProvider.on({
                    data: function( provider, e, eOpts ){
                        if (e.result.requiereLogin) {
                            //if (e.action=="esinube_sesiones" && (e.method=="frmsubmitLogin" || e.method=="cerrarSesion" || e.method=="requiereLogin") ) {
                            if (e.action=="esinube_sesiones") {
                                // Dejamos pasar para que se quede en la ventana de login
                            } else {
                                var winLogin = Ext.ComponentQuery.query('esinube_view_login')[0];
                                if (!winLogin) {
        
        
        // Aqui habria crear una venta de re-login con menos cosas (ni registro, ni logo ni nada... 
        //solo usuario actual sin poder tocarlo y password)
        
        // Si lo dejamos asi al poner el password recarga el index.php y nos cierra todo lo que tenemos abierto.
        
                                    // Mostrar ventana de Login
                                    winLogin = me.getView('login').create();
                                    winLogin.show();
                                }
                            }
                        }
                    },
                    scope: this
                });
        
            
                // Comprobar si estamos en un proceso de recuperacion de password (url directa)
                var mostrarRecuperarPassword = false;
                if ((typeof esinubeRecuperarPassword != "undefined") && (typeof esinubeRecuperarPasswordHash != "undefined") ) {
                    if (esinubeRecuperarPassword==true && esinubeRecuperarPasswordHash.length>0) {
                        mostrarRecuperarPassword = true;
                    }
                }
                    
                if (mostrarRecuperarPassword) {                
    
                    // Mostrar ventana de recuperacion de password
                    winLoginRecuperarPassword = me.getView('loginRecuperarPassword').create();
                    winLoginRecuperarPassword.show();
    
                } else {
        
                    // Comprobar si es necesario hacer login
                    Ext.esinubeDirect.esinube_sesiones.requiereLogin(function(response, event) {
                        if (response.requiereLogin) {
                            // Mostrar ventana de Login
                            winLogin = me.getView('login').create();
                            winLogin.show();
                        } else {
            
                            // Ejecutar los pasos iniciales al entrar (incluye la creacion del view escritorioPrincipal)
                            me.getController('escritorio').pasosIniciales();
            
                        }
                    });    
                }
                
            }
        
        });
    If i execute the application without building it works fine.

    If i try to build with
    Code:
    sencha app build
    Then none of my controllers, models, views, etc... are added to all-classes.js file

    What i have to check ???
    -------------------
    Manel Juàrez

  2. #2
    Sencha User
    Join Date
    Feb 2010
    Posts
    357
    Vote Rating
    4
    maneljn is on a distinguished road

      0  

    Default


    In my app there is not "Main.js" controller, not "Viewport.js" view file, etc...
    My main controller is called "escritorio.js" (myapp.controller.escritorio)

    The build command always ask for this "Main" and "Viewport" files. And i have created on of them just with the class definition.

    But it stills building without adding my own classes in all-classes.js

    PD. If i execute
    Code:
    sencha app refresh
    Then inside bootstrap.js file, it appears my own classes names, but building again , does the same problem.
    -------------------
    Manel Juàrez