Перейти к содержимому
Odoo Меню
  • Войти
  • Попробовать бесплатно
  • Модули
    Финансы
    • Бухгалтерия
    • Выставление счетов
    • Расходы
    • Таблицы
    • Документооборот
    • Подпись
    Продажи
    • CRM
    • Продажи
    • POS Магазин
    • POS Ресторан
    • Подписки
    • Аренда
    Вебсайты
    • Конструктор вебсайтов
    • eCommerce
    • Блог
    • Форум
    • Онлайн-чат
    • Электронное обучение
    Логистика
    • Склад
    • Производство
    • PLM
    • Закупки
    • Обслуживание
    • Качество
    Отдел кадров
    • Сотрудники
    • Подбор персонала
    • Отпуска
    • Оценка персонала
    • Реферальная программа
    • Автопарк
    Маркетинг
    • SMM
    • E-mail рассылки
    • СМС рассылки
    • Мероприятия
    • Автоматизация маркетинга
    • Опросы
    Услуги
    • Проекты
    • Табели
    • Выездной сервис
    • Поддержка
    • Планирование
    • Встречи
    Продуктивность
    • Обсуждения
    • Согласование
    • IoT
    • VoIP-телефония
    • Knowledge
    • WhatsApp
    Сторонние приложения Модуль Студия Odoo Платформа Odoo Cloud
  • Индустрии
    Розничная торговля
    • Книжный магазин
    • Магазин одежды
    • Мебельный магазин
    • Продуктовый магазин
    • Строительный магазин
    • Магазин игрушек
    Гостинично-ресторанный бизнес
    • Бар и паб
    • Ресторан
    • Фастфуд
    • Гостевой дом
    • Дистрибьютор напитков
    • Отель
    Недвижимость
    • Агентство недвижимости
    • Архитектурное бюро
    • Строительство
    • Управление недвижимостью
    • Ландшафтный дизайн
    • Товарищество собственников жилья
    Консалтинг
    • Бухгалтерская фирма
    • Партнер Odoo
    • Маркетинговое агентство
    • Юридическая фирма
    • Подбор персонала
    • Аудиторское бюро
    Производство
    • Текстиль
    • Металл
    • Мебель
    • Продукты питания
    • Пивоварня
    • Корпоративные сувениры
    Здоровье и фитнес
    • Спортивный комплекс
    • Магазин оптики
    • Фитнес-клуб
    • Велнес-центр
    • Аптека
    • Салон красоты
    Услуги
    • Специалист по бытовым услугам
    • Продажа и обслуживание IT-оборудования
    • Солнечные энергосистемы
    • Производство обуви
    • Клининг
    • Системы ОВКВ
    Прочее
    • Некоммерческая организация
    • Консалтинг в сфере устойчивого развития
    • Аренда рекламных щитов
    • Бизнес по фотосъемке
    • Прокат велосипедов
    • Реселлер программного обеспечения
    Все индустрии
  • Community
    Обучение
    • Видео уроки
    • Документация
    • Сертификация
    • Тренинг
    • Блог
    • Подкаст
    Образование и развитие
    • Образовательная программа
    • Деловая игра Scale Up!
    • Экскурсия в офис Odoo
    ПО
    • Скачать
    • Сравнить версии
    • Релизы
    Сотрудничество
    • Github
    • Форум
    • Мероприятия
    • Перевод
    • Стать партнером
    • Услуги для партнеров
    • Зарегистрировать бухгалтерскую фирму
    Услуги
    • Найти партнера
    • Найти бухгалтера
    • Встреча с экспертом
    • Услуги по внедрению
    • Отзывы клиентов
    • Поддержка
    • Обновления
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Заказать демонстрацию
  • Цены
  • Поддержка

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

  • CRM
  • e-Commerce
  • Бухгалтерия
  • Склад
  • PoS
  • Проекты
  • MRP
All apps
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Все посты Люди Значки
Теги (Смотреть все)
odoo accounting v14 pos v15
Об этом форуме
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Все посты Люди Значки
Теги (Смотреть все)
odoo accounting v14 pos v15
Об этом форуме
Помощь

Cannot find the definition of component

Подписаться

Получайте уведомления о появлении активности в этом посте

Этот вопрос был отмечен
javascriptdevelopmentOwl18.2
4 Ответы
2030 Представления
Аватар
Abdelrahman Sadat

I'm creating an Owl component that I'd like to use to extend(inherit) to a contacts view. However, whenever I try to load the relevant page that has my new component, I get an error  UncaughtPromiseError > OwlError  Cannot find the definition of component "DialButton"​. And I'm not sure what might be missing.

 
My code looks like this

The xml:

<?xml version="1.0" encoding="UTF-8"?>

<templates xml:space="preserve">

    <t t-name="efcx.DialButton">

      <a class="ms-3 d-inline-flex align-items-center">

        <i class="fa fa-phone"></i><small class="fw-bold ms-1">Call efcx</small>

      </a>

    </t>

</templates>


The JS:

/** @odoo-module **/

import { registry } from "@web/core/registry";

import { Component } from "@odoo/owl";


export class DialButton extends Component {  

  static template = "efcx.DialButton";

   setup() {

      super.setup(...arguments);

   }

   _dial(){

      console.log("Dialing...");

   }

}

export const fieldButton = { Component: DialButton, };

registry.add("DialButton", fieldButton);

console.log(registry.get("DialButton"))


The inheritance view (to extend the contact view):

<templates xml:space="preserve">

    <t t-inherit="web.PhoneField" t-inherit-mode="extension">

        <xpath expr="//div[hasclass('o_phone_content')]//a" position="after">

            <DialButton/>

        </xpath>

    </t>

    <t t-inherit="web.FormPhoneField" t-inherit-mode="extension">

        <xpath expr="//div[hasclass('o_phone_content')]" position="inside">

            <DialButton/>

        </xpath>

    </t>

</templates>


And finally, the portions of the manifest where I'm adding the files:

'assets': {

​'web.assets_backend': [

​ ​'efcx/static/src/js/dial_button.js',

​ ​'efcx/static/src/xml/dial_button.xml',

​ ​'efcx/static/src/views/fields/phone_field.xml',

​]


Is the component not added to the registry properly? Do I need to update the manifest? I would appreciate any help pointing out the issue 🙏



0
Аватар
Отменить
Аватар
Cybrosys Techno Solutions Pvt.Ltd
Лучший ответ

Hi,


You are registering your DialButton with:

       registry.add("DialButton", fieldButton);


but you didn't specify which registry.

By default, registry is a collection of registries like category("fields"), category("components"), category("views"), etc.


For OWL components, you must register inside a specific category, normally "components".


Here is updated JS Code:



/** @odoo-module **/


import { registry } from "@web/core/registry";

import { Component } from "@odoo/owl";


export class DialButton extends Component {

    static template = "efcx.DialButton";


    setup() {

        super.setup(...arguments);

    }


    _dial() {

        console.log("Dialing...");

    }

}


// CORRECT way: register inside the "components" category

registry.category("components").add("DialButton", DialButton);



Hope this helps

0
Аватар
Отменить
Аватар
Abdelrahman Sadat
Автор Лучший ответ

Solved by adding a js file to patch the component I was trying to extend:
See the Reference->Web Framework->Patching Code section in the documentation (can't paste link due to low karma).

Added code looks something like this:

/** @odoo-module **/

// taken from @sms/static/src/components/phone_field/phone_field.js


import { patch } from "@web/core/utils/patch";

import { PhoneField, phoneField, formPhoneField } from "@web/views/fields/phone/phone_field";

import { DialButton } from './dial_button.js';


patch(PhoneField, {

    components: {

        ...PhoneField.components,

        DialButton

    },

    defaultProps: {

        ...PhoneField.defaultProps,

    },

    props: {

        ...PhoneField.props,

    },

});


const patchDescr = () => ({

    extractProps() {

        const props = super.extractProps(...arguments);

        return props;

    },

    supportedOptions: [],

});


patch(phoneField, patchDescr());

patch(formPhoneField, patchDescr());

0
Аватар
Отменить
Аватар
Bit Level Code
Лучший ответ

    Main Issues

    • Component Registration: You're registering the component in the wrong way. For Owl components used in views, you need to register them differently.
    • Component Import: Your inheritance view is trying to use <DialButton/> directly, but it needs to be properly imported and registered to be available.
    • XML Namespace: The XML files need to ensure proper namespacing so Odoo can find your component.
  • Here's how to fix these issues:

    First, let's modify your dial_button.js file:

javascript

/** @odoo-module **/

import { registry } from "@web/core/registry";
import { Component } from "@odoo/owl";

export class DialButton extends Component {
    static template = "efcx.DialButton";
    
    setup() {
        // Note: You don't need super.setup() for Component
    }
    
    dial() {
        console.log("Dialing...");
    }
}

// Register the component in the component registry (not as a field)
registry.category("components").add("DialButton", DialButton);

Next, you need to make sure your XML inheritance properly imports the component:

xml

<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
    <t t-extend="web.PhoneField" t-inherit-mode="extension">
        <xpath expr="//div[hasclass('o_phone_content')]//a" position="after">
            <t t-component="components.DialButton"/>
        </xpath>
    </t>
    <t t-extend="web.FormPhoneField" t-inherit-mode="extension">
        <xpath expr="//div[hasclass('o_phone_content')]" position="inside">
            <t t-component="components.DialButton"/>
        </xpath>
    </t>
</templates>

Additionally, you might need to create a separate JS file to import and register the component for your views:

javascript

/** @odoo-module **/

import { registry } from "@web/core/registry";
import { DialButton } from "./dial_button";

// Make the component available to templates
const components = registry.category("components");
if (!components.contains("DialButton")) {
    components.add("DialButton", DialButton);
}

Make sure your manifest includes all these files in the correct order:

python

'assets': {
    'web.assets_backend': [
        'efcx/static/src/js/dial_button.js',
        'efcx/static/src/js/register_components.js',  # Add this new file
        'efcx/static/src/xml/dial_button.xml',
        'efcx/static/src/views/fields/phone_field.xml',
    ],
}

If you're still encountering issues, try these additional debugging steps:

    • Check the browser console to see if your console.log(registry.get("DialButton")) is showing your component
    • Try accessing it as registry.category("components").get("DialButton")
    • Make sure you've cleared your browser cache or used incognito mode to test
    • Restart the Odoo server to ensure all assets are properly rebuilt
  • 0
    Аватар
    Отменить
    Аватар
    Damien Hick
    Лучший ответ

    Hi,

    i'm not sure to correctly respond to the whole problem but i thought that in all view it was compulsary to define the starting and ending xml "balise".
    You define your empty "balise" in a way that i'm not sure Odoo loves it :

    <DialButton/>

    I can suggest to try first with a starting and ending, like here :

    <DialButton></DialButton>

    Hope it'll help.

    0
    Аватар
    Отменить
    Не оставайтесь в стороне – присоединяйтесь к обсуждению!

    Создайте аккаунт сегодня, чтобы получить доступ к эксклюзивным функциям и стать частью нашего замечательного сообщества!

    Регистрация
    Похожие посты Ответы Просмотры Активность
    How can I use my only web url domain using odoo?
    javascript development
    Аватар
    Аватар
    1
    сент. 25
    1458
    How to Load Related Many2Many Data (pos.ticket.type) into the Frontend?
    javascript development
    Аватар
    0
    июн. 25
    1804
    Odoo 18 POS - Discount Button Group Permissions Not Working
    javascript development
    Аватар
    Аватар
    2
    июн. 25
    1968
    ¿Cómo puedo crear un Dashboard con KPIs y gráficos con Chart.js?
    javascript development
    Аватар
    0
    апр. 25
    1936
    Odoo icon change Решено
    javascript development
    Аватар
    Аватар
    2
    янв. 25
    2486
    Сообщество
    • Видео уроки
    • Документация
    • Форум
    Открытый исходный код
    • Скачать
    • Github
    • Runbot
    • Перевод
    Услуги
    • Хостинг Odoo.sh
    • Поддержка
    • Обновление
    • Индивидуальные решения по доработке
    • Образование
    • Найти бухгалтера
    • Найти партнера
    • Стать партнером
    О нас
    • Наша компания
    • Активы бренда
    • Cвяжитесь с нами
    • Вакансии
    • Мероприятия
    • Подкаст
    • Блог
    • Клиенты
    • Правовые документы • Конфиденциальность
    • Безопасность
    الْعَرَبيّة 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 – это набор бизнес-модулей с открытым исходным кодом, который закроет все потребности вашей компании: CRM, E-commerce, Бухгалтерия, Склад, POS, управление проектами и др.

    Odoo сочетает в себе простоту использования и полную интеграцию всех бизнес-процессов в одной системе.

    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