Bỏ qua để đến Nội dung
Odoo Menu
  • Đăng nhập
  • Dùng thử miễn phí
  • Ứng dụng
    Tài chính
    • Kế toán
    • Hóa đơn
    • Chi phí
    • Bảng tính (BI)
    • Tài liệu
    • Ký tên
    Bán hàng
    • CRM
    • Bán hàng
    • POS Cửa hàng
    • POS Nhà hàng
    • Đăng ký
    • Cho thuê
    Trang web
    • Trình tạo trang web
    • Thương mại điện tử
    • Blog
    • Diễn đàn
    • Trò chuyện trực tiếp
    • Học trực tuyến
    Chuỗi cung ứng
    • Tồn kho
    • Sản xuất
    • PLM
    • Mua hàng
    • Bảo dưỡng
    • Chất lượng
    Nhân sự
    • Nhân viên
    • Tuyển dụng
    • Ngày nghỉ
    • Đánh giá
    • Giới thiệu
    • Đội xe
    Marketing
    • Marketing trên MXH
    • Marketing qua email
    • Marketing qua SMS
    • Sự kiện
    • Tự động hóa Marketing
    • Khảo sát
    Dịch vụ
    • Dự án
    • Bảng chấm công
    • Dịch vụ hiện trường
    • Hỗ trợ
    • Kế hoạch
    • Lịch hẹn
    Năng suất
    • Thảo luận
    • Phê duyệt
    • IoT
    • VoIP
    • Kiến thức
    • WhatsApp
    Ứng dụng của bên thứ ba Studio Odoo Nền tảng Đám mây Odoo
  • Ngành
    Bán lẻ
    • Nhà sách
    • Cửa hàng quần áo
    • Cửa hàng nội thất
    • Cửa hàng tạp hóa
    • Cửa hàng đồ kim khí
    • Cửa hàng đồ chơi
    Ẩm thực & Dịch vụ lưu trú
    • Bar và quán rượu
    • Nhà hàng
    • Đồ ăn nhanh
    • Guest house
    • Nhà phân phối đồ uống
    • Khách sạn
    Bất động sản
    • Công ty môi giới bất động sản
    • Công ty kiến trúc
    • Xây dựng
    • Quản lý bất động sản
    • Làm vườn
    • Hiệp hội chủ sở hữu bất động sản
    Tư vấn
    • Công ty kế toán
    • Đối tác Odoo
    • Công ty marketing
    • Công ty luật
    • Tuyển dụng
    • Thanh tra & chứng nhận
    Sản xuất
    • Dệt may
    • Kim loại
    • Nội thất
    • Ẩm thực
    • Nhà máy bia
    • Quà tặng doanh nghiệp
    Sức khoẻ & fitness
    • CLB thể thao
    • Cửa hàng kính mắt
    • Trung tâm fitness
    • Chuyên gia chăm sóc sức khỏe
    • Hiệu thuốc
    • Tiệm làm tóc
    Thương mại
    • Dịch vụ sửa chữa
    • Phần cứng CNTT & Hỗ trợ
    • Hệ thống năng lượng mặt trời
    • Công ty sản xuất giày
    • Dịch vụ vệ sinh
    • Dịch vụ HVAC
    Khác
    • Tổ chức phi lợi nhuận
    • Cơ quan môi trường
    • Cho thuê biển quảng cáo
    • Nhiếp ảnh
    • Cho thuê xe đạp
    • Đại lý phần mềm
    Xem tất cả ngành
  • Cộng đồng
    Học tập
    • Khóa học
    • Tài liệu
    • Chứng chỉ
    • Đào tạo
    • Blog
    • Podcast
    Thúc đẩy đào tạo
    • Chương trình đào tạo
    • Trò chơi kinh doanh Scale Up!
    • Tham quan Odoo
    Nhận phần mềm
    • Tải xuống
    • So sánh các phiên bản
    • Phiên bản
    Hợp tác
    • Github
    • Diễn đàn
    • Sự kiện
    • Dịch thuật
    • Trở thành đối tác
    • Dịch vụ dành cho Đối tác
    • Đăng ký công ty kế toán của bạn
    Nhận dịch vụ
    • Tìm đối tác
    • Tìm kế toán
    • Gặp chuyên gia hỗ trợ
    • Dịch vụ Triển khai
    • Khách hàng tham khảo
    • Hỗ trợ
    • Nâng cấp
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Nhận một buổi demo
  • Bảng giá
  • Trợ giúp

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

  • CRM
  • e-Commerce
  • Kế toán
  • Tồn kho
  • PoS
  • Dự án
  • MRP
All apps
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Hỗ trợ

Cannot find the definition of component

Đăng ký nhận tin

Nhận thông báo khi có hoạt động trên bài viết này

Câu hỏi này đã bị gắn cờ
javascriptdevelopmentOwl18.2
4 Trả lời
2108 Lượt xem
Ảnh đại diện
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
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Cybrosys Techno Solutions Pvt.Ltd
Câu trả lời hay nhất

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
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Abdelrahman Sadat
Tác giả Câu trả lời hay nhất

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
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Bit Level Code
Câu trả lời hay nhất

    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
    Ảnh đại diện
    Huỷ bỏ
    Ảnh đại diện
    Damien Hick
    Câu trả lời hay nhất

    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
    Ảnh đại diện
    Huỷ bỏ
    Bạn có hứng thú với cuộc thảo luận không? Đừng chỉ đọc, hãy tham gia nhé!

    Tạo tài khoản ngay hôm nay để tận hưởng các tính năng độc đáo và tham gia cộng đồng tuyệt vời của chúng tôi!

    Đăng ký
    Bài viết liên quan Trả lời Lượt xem Hoạt động
    How can I use my only web url domain using odoo?
    javascript development
    Ảnh đại diện
    Ảnh đại diện
    1
    thg 9 25
    1673
    How to Load Related Many2Many Data (pos.ticket.type) into the Frontend?
    javascript development
    Ảnh đại diện
    0
    thg 6 25
    1917
    Odoo 18 POS - Discount Button Group Permissions Not Working
    javascript development
    Ảnh đại diện
    Ảnh đại diện
    2
    thg 6 25
    2069
    ¿Cómo puedo crear un Dashboard con KPIs y gráficos con Chart.js?
    javascript development
    Ảnh đại diện
    0
    thg 4 25
    1987
    Odoo icon change Đã xử lý
    javascript development
    Ảnh đại diện
    Ảnh đại diện
    2
    thg 1 25
    2572
    Cộng đồng
    • Khóa học
    • Tài liệu
    • Diễn đàn
    Open source
    • Tải xuống
    • Github
    • Runbot
    • Dịch thuật
    Dịch vụ
    • Lưu trữ Odoo.sh
    • Hỗ trợ
    • Nâng cấp
    • Phát triển tùy chỉnh
    • Đào tạo
    • Tìm kế toán
    • Tìm đối tác
    • Trở thành đối tác
    Giới thiệu công ty
    • Công ty của chúng tôi
    • Tài sản thương hiệu
    • Liên hệ
    • Việc làm
    • Sự kiện
    • Podcast
    • Blog
    • Khách hàng
    • Pháp lý • Riêng tư
    • Bảo mật
    الْعَرَبيّة 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 là bộ ứng dụng kinh doanh có open source đáp ứng tất cả các nhu cầu của công ty bạn: CRM, thương mại điện tử, kế toán, tồn kho, POS, quản lý dự án, v.v.

    Định hướng giá trị riêng biệt của Odoo là tích hợp hoàn toàn và dễ dàng sử dụng.

    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