Рубрики
Без рубрики

Creando Widgets Para Odoo (Parte 1)

Creando Widgets Para Odoo (Parte 1). Después de Semanas de inachividad bevelso con una de … Теги с Python, Odoo, JavaScript.

Después de semanas de inachividad bevelso con una de Одоо 10 Como Ya Hay Bastantes Sitios POR AHí DEDICADOS ExplicAr Cassas y Razones de lo que se aced hacer против Python Desde El Backend Voy a centrarme en el trabajo con JavaScript y el Frontend Отказ

EN ESTE ARTíCULO VAMOS КРЕНА ООН НУЕВО Виджет Para Manejar Campos Enterop Y De Coma Flotante En La Vista (La Parte v de Mv *). Aunque Pueda Parecer Un Ejemplo Simple, Surgió de La Necesidad Real de Provoveder Campos Numéricos LimitaDos en un Rango de Una Forma Explicita, Sencilla Y Agradable Para El Usuario.

Comenzando El ProyeCto.

Para Poder Reutilizar El Виджет Вамос Кричья ООН Аддон que contenga las bibliotecas y el código necesario para hacerlo funciapar. EmpeCemos Creando El Esqueleto del Módulo:

$ odoo-bin scaffold widget-slider

Añadimos la descripción del добавить , Lo Doximos Como Unlyable, PoneMos Una Cabyía Válida E Incluimos * Веб COMO Зависимость. Continuanto.

Библиотекас externas.

Nuestro Виджет Tiene Una Sola Conceptenhia Extrana: Слайдер Bootstrap Отказ Нормалия Утилизириамос Bower О NPM Para Manejar Las Conceptenceas de Proyectos JavaScript Перо пуль-алго Тан Пекеньо No Es Necesario, Basta Con Descargar El Выпуск de la biblioteca y los archivos para Статический/lib. .

Para Hacer Estos Archivos Disponiables El Backend Extenderemos La Plantilla_Web.assets_backend_. Modifiquemos El Archivo Autogenerado шаблоны.xml.


JavaScript Doctro de Odoo (Para Novatos).

Ya TeneMos Lo Necesario Para Comenzar Con Nuestro Виджет AHORA SOLO QUEDA ESCRIBIR EL Código Necesario Para Inaclyizar El Plugin.

Lo primero que дебюс saber para trabajar con JavaScript выделять Одоо ES Que a la versión 10 Utiliza Un Concepto de Módulos Muy Parecido A потребности Отказ Supongamos que TeneMos un Módulo валидар Donde Olluimos Utilitarios Para Эль Ресто де Нюэстрос Аддоны y ahí exportamos una función check_int Отказ

odoo.define('validar.enteros, function(require){
    "use strict";

    var check_int = function(val){
        if(!Number.isInteger(val)){
            throw new TypeError("El valor no es entero");
        }
        else {
            return val;
        }
    };
    return {
        check_int: check_int
    };
});

En otro Аддон (O Simplemente Otro Módulo) Tendríamos Algo Parecido A:

odoo.define(otro_addon.otro_servicio', function(require){

    valida_enteros = require('web_validar.enteros').check_int;
    // Resto del código
});

Si Eres Más de Backend Piensa en todo esto como:

  1. Уна Версия JavaScript Де Self.env [«Modelo»]
  2. UNA FORMA FITILE DEALAR CENSECEASIAS SIN CARMUEN EL ORDEN EN QUE CARGUEN LOS Archivos.

La desventaja de este sistema es es es la única forma de acceder a los components que brinda El фреймворк , lo que lleva a goutas veces que que que que обертки Аун Алеледор де Функционал Сэнсильские.

Клазы, Herencia, виджеты

Otro Punto Tener en cuenta es la programación orientada objetos. Conceptos Tan знакомы COMO CLASES, OBJETOS Y HERENCIA TIENEN ENFOQUE “ALTERATIVO” EN JavaScript Отказ Лос Десрулдорес де Одоо Siguieron La Idey de Backbonejs de repuredar el modelo de Herencia de. Джон Стиг

  1. LAS CLASES SE DESPEREN HEREDANDO DE Класс О де Альгуна де Сус хиджас.
  2. продлить () SE UTILIZA PARA HEREDAR DE UNA CLASE, COMO PARáMETRO ACTECTA OBJETOS (O Diccionarios que es lo mismo).
  3. init () Actúa Como Constructor.
  4. включать () Времяможенные модифицированные модификаторы (A LO Bonkey Patch )
  5. Кундо Утилизамос продлить () О включать () CADA MÉTODO QUE SE REDEFINA PUEDE UTILIZAR Это ._super () PARA Acceder A Repelsación оригинал.

Томандо ООН Ejemplo del Código de Odoo

// Definimos una clase Person
 var Person = Class.extend({
  init: function(isDancing){
     this.dancing = isDancing;
    },
  dance: function(){
     return this.dancing;
    }
 });

// Y ahora una clase Ninja
 var Ninja = Person.extend({
  init: function(){
    this._super(false);
  },
  swingSword: function(){
    return true;
  }
 });

Siguiendo Este Modelo, CADA Виджет Es una clase que hereda de сеть. Widget_Y ALGúN QUE OTRO _MIXIN Отказ

Creando Un Slider Para Valores Enterop.

En vez de crage nuestro слайдер DESDE EL INICIO, APROVECHEMOS Que Esseede Ena Clase Encargada de Manejar Campos Numéricos Y Heredemos de Elela. Creemos El Archivo Статический/SRC/JS/Widget_slider.js Con El Siguiente Contenido.

odoo.define('web_slider.form', function(require){
    "use strict";

    var core = require('web.core');
    var FieldFloat = require('web.form_widgets').FieldFloat;

    // Heredamos de esta clase para aprovechar toda la
    // maquinaria de inicialización.
    var FieldSlider = FieldFloat.extend({
        // Método que se invoca cuando se va a mostrar
        // el widget
        initialize_content: function(){
            this._super();
            this.wrapped = this.$el.slider(this.options);
            // Desabilitar el slider si está en modo
            // solo lectura
            if (this.get("effective_readonly")){
                this.wrapped.slider("disable");
            }
        },

    });
    // Registramos nuestro widget como disponible para
    // las vistas de formulario
    core.form_widget_registry
        .add('slider', FieldSlider);
    return {
        FieldSlider : FieldSlider
    };
});

Ahora Modifiquemos Nuestra Plantilla de ресурсы Para Que Cargue Este Archivo.


Instalemos El Addon, ActiveMos El Modo Desarrollador Y Probemos Cambiar Custquier Campo de Una Vista Formulio Anadiendo Widget = Slider a la daveración.

Resumiendo.

Crage ООН Нуэво Виджет No Es Un Proceso Complejo, CADA Componente DEL_FRAMEWORK_ ESTA DISENADO DE MODO EN QUE Extender, Modififar O Anadir Funcallidades Sea Un Proceso Sencillo Para Cualquiera Con Conocimientos de JavaScript Отказ

Dicho Esto, Пезар-де-que Essize Уна Гиафтор , No Es Para Nada Completea y en la mayoría de los casos la única solución a la pregunta “es es regrir al código fuente del hasta dar con lo que buscamos.

Оригинал: “https://dev.to/yorodm/creando-widgets-para-odoo-parte-1-15jj”