Skip to Content
เมนู
คุณต้องลงทะเบียนเพื่อโต้ตอบกับคอมมูนิตี้
คำถามนี้ถูกตั้งค่าสถานะ
1 ตอบกลับ
1542 มุมมอง

Hello all,

I've been struggling with making a js file for a bit now. It's my first time working with js and I have no clue what I'm doing. I keep getting the error of  Uncaught Error: Dependencies should be defined by an array:

Or the error that I'm missing or not using the right dependencies:  The following modules are needed by other modules but have not been defined, they may not be present in the correct asset bundle:web.core, web.rpc, web.Widget.

This is my code, please help!

odoo.define('diana.product_tabs', ['web.core', 'web.rpc', 'web.Widget'], function (require) {

    "use strict";


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

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

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



    var ProductTabs = Widget.extend({

        template: 'ProductTabsTemplate', 



        start: function () {

            return this._super.apply(this, arguments).then(() => {

                this._setupProductCategoryTabs();

            });

        },



        _getProductIds: function () {

            return this.product_ids ? this.product_ids.res_ids : [];

        },


        _setupProductCategoryTabs: function () {

            var self = this;

            var products = this._getProductIds();


            if (products.length === 0) {

                console.log("No products selected.");

                return;

            }


            rpc.query({

                model: 'product.template',

                method: 'read',

                args: [products, ['name', 'default_code', 'list_price', 'qty_available', 'categ_id']],

            }).then(function (productRecords) {

                console.log("Product Records: ", productRecords);

                self._renderProductTabs(productRecords);

            });

        },



        _renderProductTabs: function (productRecords) {

            var categories = {};

            productRecords.forEach(function (product) {

                var categoryId = product.categ_id[0];

                if (!categories[categoryId]) {

                    categories[categoryId] = {

                        id: categoryId,

                        name: product.categ_id[1],

                        products: []

                    };

                }

                categories[categoryId].products.push(product);

            });



            var $tabsContainer = this.$('.o_product_category_tabs');

            $tabsContainer.empty(); 


            Object.values(categories).forEach(category => {

                var tabHeader = $('<div/>', {

                    class: 'tab-header',

                    text: category.name,

                    style: 'cursor: pointer; font-weight: bold; margin-top: 10px;'

                });


                var tabContent = $('<div/>', {

                    class: 'tab-content',

                    style: 'display:none; margin-left: 15px;'

                });


                category.products.forEach(product => {

                    var productLine = $('<div/>', {

                        class: 'product-line',

                        style: 'margin-bottom: 5px;'

                    }).append(

                        $('<span/>', { text: product.name, style: 'margin-right: 10px;' }),

                        $('<span/>', { text: product.default_code, style: 'margin-right: 10px; color: gray;' }),

                        $('<span/>', { text: 'Price: ' + product.list_price.toFixed(2) + ' €', style: 'margin-right: 10px;' }),

                        $('<span/>', { text: 'Stock: ' + product.qty_available })

                    );

                    tabContent.append(productLine);

                });


                $tabsContainer.append(tabHeader).append(tabContent);

            });


            $tabsContainer.on('click', '.tab-header', function () {

                $(this).next('.tab-content').slideToggle();

            });

        }

    });


    core.action_registry.add('diana.product_tabs', ProductTabs);

});



อวตาร
ละทิ้ง

which odoo version ?

ผู้เขียน

Odoo 17, I don't think we made the upgrade to 18 yet

คำตอบที่ดีที่สุด

Hi,

I wanted to let you know that Odoo 17 has switched from using Backbone.js to a new framework called OWL (Odoo Web Library) for the frontend. OWL is a modern, component-based framework similar to React or Vue.js, and it replaces many older ways of building the interface.If you have any old code based on Backbone.js, it will need to be updated to work with OWL.

Hope this helps.

อวตาร
ละทิ้ง
Related Posts ตอบกลับ มุมมอง กิจกรรม
0
มี.ค. 25
289
0
ก.พ. 25
527
1
ธ.ค. 24
2503
2
พ.ย. 24
909
0
ก.ย. 24
726