Se rendre au contenu
Odoo Menu
  • Se connecter
  • Essai gratuit
  • Applications
    Finance
    • Comptabilité
    • Facturation
    • Notes de frais
    • Feuilles de calcul (BI)
    • Documents
    • Signature
    Ventes
    • CRM
    • Ventes
    • PdV Boutique
    • PdV Restaurant
    • Abonnements
    • Location
    Sites web
    • Site Web
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Chaîne d'approvisionnement
    • Inventaire
    • Fabrication
    • PLM
    • Achats
    • Maintenance
    • Qualité
    Ressources Humaines
    • Employés
    • Recrutement
    • Congés
    • Évaluations
    • Recommandations
    • Parc automobile
    Marketing
    • Marketing Social
    • E-mail Marketing
    • SMS Marketing
    • Événements
    • Marketing Automation
    • Sondages
    Services
    • Projet
    • Feuilles de temps
    • Services sur Site
    • Assistance
    • Planification
    • Rendez-vous
    Productivité
    • Discussion
    • Validations
    • Internet des Objets
    • VoIP
    • Connaissances
    • WhatsApp
    Applications tierces Odoo Studio Plateforme Cloud d'Odoo
  • Industries
    Commerce de détail
    • Librairie
    • Magasin de vêtements
    • Magasin de meubles
    • Épicerie
    • Quincaillerie
    • Magasin de jouets
    Food & Hospitality
    • Bar et Pub
    • Restaurant
    • Fast-food
    • Maison d’hôtes
    • Distributeur de boissons
    • Hôtel
    Immobilier
    • Agence immobilière
    • Cabinet d'architecture
    • Construction
    • Gestion immobilière
    • Jardinage
    • Association de copropriétaires
    Consultance
    • Cabinet d'expertise comptable
    • Partenaire Odoo
    • Agence Marketing
    • Cabinet d'avocats
    • Aquisition de talents
    • Audit & Certification
    Fabrication
    • Textile
    • Métal
    • Meubles
    • Alimentation
    • Brewery
    • Cadeaux d'entreprise
    Santé & Fitness
    • Club de sports
    • Opticien
    • Salle de fitness
    • Praticiens bien-être
    • Pharmacie
    • Salon de coiffure
    Trades
    • Bricoleur
    • Matériel informatique et support
    • Systèmes photovoltaïques
    • Cordonnier
    • Services de nettoyage
    • Services CVC
    Autres
    • Organisation à but non lucratif
    • Agence environnementale
    • Location de panneaux d'affichage
    • Photographie
    • Leasing de vélos
    • Revendeur de logiciel
    Browse all Industries
  • Communauté
    Apprenez
    • Tutoriels
    • Documentation
    • Certifications
    • Formation
    • Blog
    • Podcast
    Renforcer l'éducation
    • Programme éducatif
    • Business Game Scale-Up!
    • Rendez-nous visite
    Obtenir le logiciel
    • Téléchargement
    • Comparez les éditions
    • Versions
    Collaborer
    • Github
    • Forum
    • Événements
    • Traductions
    • Devenez partenaire
    • Services for Partners
    • Enregistrer votre cabinet comptable
    Nos Services
    • Trouver un partenaire
    • Trouver un comptable
    • Rencontrer un conseiller
    • Services de mise en œuvre
    • Références clients
    • Assistance
    • Mises à niveau
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Obtenir une démonstration
  • Tarification
  • Aide

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Comptabilité
  • Inventaire
  • PoS
  • Projet
  • MRP
All apps
Vous devez être inscrit pour interagir avec la communauté.
Toutes les publications Personnes Badges
Étiquettes (Voir toutl)
odoo accounting v14 pos v15
À propos de ce forum
Vous devez être inscrit pour interagir avec la communauté.
Toutes les publications Personnes Badges
Étiquettes (Voir toutl)
odoo accounting v14 pos v15
À propos de ce forum
Aide

how to patch a owl class, in past we use include to patch widget

S'inscrire

Recevez une notification lorsqu'il y a de l'activité sur ce poste

Cette question a été signalée
4 Réponses
16674 Vues
Avatar
ivan deng

hi, anyone know that,


if we want to patch a owl class, like 'searchpanel'.  how to do that?


===========

like that In odoo 13, we use include. 


Patching an existing class

It is not common, but we sometimes need to modify another class in place. The goal is to have a mechanism to change a class and all future/present instances. This is done by using the include method:


var Hamster = require('web.Hamster');

Hamster.include({
    sleep: function () {
        this._super.apply(this, arguments);
        console.log('zzzz');
    },
});
6
Avatar
Ignorer
Ray

Please go through this, may help you

https://odoo.github.io/owl/playground/

Marcelo Pereira

I have the same question, anyone found right way to do this?

Kasbaji nassr allah

It did work thank you !

Oleh Diatlenko

I'm glad it helped you.

Avatar
Oleh Diatlenko
Meilleure réponse

odoo.define('my_module/static/src/js/search_bar.js', function (require) {
  'use strict';

  const { patch } = require('web.utils');
  const components = {
    SearchBar: require('web.SearchBar')
  };

  patch(components.SearchBar, 'my_module/static/src/js/search_bar.js', {
    _onSearchInput(ev) {
      // do some stuff here
      return this._super(...arguments);
    }
  });
});

2
Avatar
Ignorer
Kasbaji nassr allah

Thanks for the response, but the way you did it only overrides an existing function, how would you add a new function to an existing class?

Oleh Diatlenko

Have you tried to add new methods this way? In this example, I updated the existing method indeed. But in our project, I also added a new method just next to the _onSearchInput method, and access to it using "this". Hope that helped you. And yeah, if that doesn't help, you can do it using monkey-patch - I think someone else already added an example.

Avatar
Levenez Morgan
Meilleure réponse

BEST WAY
https://eurodoo.com/blog/eurodoo-blog-1/how-to-override-js-function-in-odoo14-owl-5

0
Avatar
Ignorer
Avatar
Christian Belewete
Meilleure réponse
const Registry = require('web.Registry');
const Hamster = require('web.Hamster');
const ExtendedHamster = (Hamster) =>
    class extends Hamster {
        sleep() {
            super.sleep(...arguments);
            console.log('zzzz');
        }
    }
Registry.Component.extend(Hamster, ExtendedHamster);
return ExtendedHamster;
0
Avatar
Ignorer
Oleh Diatlenko

monkey-patching should work indeed, but odoo developers suggest using the patch method instead.

Avatar
Evelb Tecnicas Y Sistemas Sl.
Meilleure réponse

After saying Shurshilov's example i work a litle to find a proper solution. Here you can find a complete example.

Thanks Shurshilov!

.js file

\\ \\\
\\ \\\

odoo.define('mail_message_select/static/src/js/mail_message_select.js', function (require) {
'use strict';
/*
- Add new owl.Context variable 'selectedMessage' to mail environment to control which message is selected.
- Add new Context selectedMessage reaction to Message component to control message selected appearance.
- Add new property dummy_property_example to illustrate how to add a new property.
- Overwrite _onClick Message component to save in the Context clicked message as selected.
- Create new get isSelectedMessage method accessible from template.
*/
const {Context} = owl;
const {useContext} = owl.hooks;
const DiscussWidget = require('mail/static/src/widgets/discuss/discuss.js'); // Where the mail environment is created
const MessageList = require('mail/static/src/components/message_list/message_list.js'); // Message's parent component
const oldMessage = require('mail/static/src/components/message/message.js'); // Component what we want inherit
DiscussWidget.include({
  willStart: async function () {
  await this._super(...arguments);
this.env.selectedMessage = new Context({localId: undefined});
  },
});
class newMessage extends oldMessage {
  constructor(parent, props) {
  super(parent, props);
this.selectedMessage = useContext(parent.env.selectedMessage);
/* Here you can add useState, useRef... */
}
  _onClick(ev) {
  super._onClick(ev);
this.env.selectedMessage.state.localId = this.props.messageLocalId;
  }
  get isSelectedMessage () {
return (this.env.selectedMessage.state.localId === this.props.messageLocalId);
  }
};
/* here you can add new properties like:
newMessage.props['dummy_property_example'] = {type: Boolean, optional: true};
*/
MessageList.components.Message = newMessage; // Apply the new inherited component to parent
});

.css file

.o_mail_message_select {
background-color: lightgray;
}

.xml template

<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">

<t t-inherit="mail.Message" t-inherit-mode="extension">
<xpath expr="//div[hasclass('o_Message')]" position="attributes">
<attribute name="t-att-class">{
'o-clicked': state.isClicked,
'o-discussion': message and (message.is_discussion or message.is_notification),
'o-mobile': env.messaging.device.isMobile,
'o-not-discussion': message and !(message.is_discussion or message.is_notification),
'o-notification': message and message.message_type === 'notification',
'o-selected': props.isSelected,
'o-squashed': props.isSquashed,
'o-starred': message and message.isStarred,
'o_mail_message_select': isSelectedMessage,
}</attribute>
</xpath>
</t>

</templates>
0
Avatar
Ignorer
Levenez Morgan

I made the solution on classes, not prototypes. Since a separate difference between an owl is that it consists of native classes.

Evelb Tecnicas Y Sistemas Sl.

Shurshilov, could you publish your solution, please?

Levenez Morgan

odoo.define('attachments_manager/static/src/components/attachment_box_custom/attachment_box_custom.js', function (require) {

'use strict';

const patchMixin = require('web.patchMixin');

const CustomAttachmentBox = patchMixin(require('mail/static/src/components/attachment_box/attachment_box.js'));

const Chatter = require('mail/static/src/components/chatter/chatter.js');

const { Component, useState } = owl;

const { useRef } = owl.hooks;

CustomAttachmentBox.patch('attachments_manager.attachments_box', T => class extends T {

constructor(...args) {

super(...args);

this.state = useState({

hasFavoritesDialog: false,

hasWebcamDialog: false,

snapshot: ''

});

this._amNewRef = useRef('am-new');

}

});

Chatter.components.AttachmentBox = CustomAttachmentBox;

return Chatter.components.AttachmentBox;

});

Vous appréciez la discussion ? Ne vous contentez pas de lire, rejoignez-nous !

Créez un compte dès aujourd'hui pour profiter de fonctionnalités exclusives et échanger avec notre formidable communauté !

S'inscrire
Communauté
  • Tutoriels
  • Documentation
  • Forum
Open Source
  • Téléchargement
  • Github
  • Runbot
  • Traductions
Services
  • Hébergement Odoo.sh
  • Assistance
  • Migration
  • Développements personnalisés
  • Éducation
  • Trouver un comptable
  • Trouver un partenaire
  • Devenez partenaire
À propos
  • Notre société
  • Actifs de la marque
  • Contactez-nous
  • Emplois
  • Événements
  • Podcast
  • Blog
  • Clients
  • Informations légales • Confidentialité
  • Sécurité.
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo est une suite d'applications open source couvrant tous les besoins de votre entreprise : CRM, eCommerce, Comptabilité, Inventaire, Point de Vente, Gestion de Projet, etc.

Le positionnement unique d'Odoo est d'être à la fois très facile à utiliser et totalement intégré.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now