79586850

Date: 2025-04-22 15:40:47
Score: 0.5
Natty:
Report link

Thanks to KenlyΒ΄s feedback i could solve it.

This ensures your JS only runs on your intended view and doesn't affect global performance or other modules.

πŸ“ Recommended module structure:

your_module/
β”œβ”€β”€ static/
β”‚   └── src/
β”‚       └── js/
β”‚           β”œβ”€β”€ custom_renderer.js
β”‚           └── custom_view.js
β”œβ”€β”€ views/
β”‚   └── custom_form_view.xml
β”œβ”€β”€ __manifest__.py

🧠 1. custom_renderer.js

odoo.define('your_module.CustomRenderer', function(require) {
    'use strict';

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

    const CustomRenderer = FormRenderer.extend({
        _renderView: function() {
            this._super.apply(this, arguments);
            try {
                console.log('πŸ”§ CustomRenderer active only on this view');

                // Your custom logic here
                const input = this.el.querySelector('input[name="your_field_name"]');
                if (input) {
                    input.focus();
                }

            } catch (err) {
                console.warn('⚠️ Error in CustomRenderer:', err);
            }
        }
    });

    return CustomRenderer;
});

🧩 2. custom_view.js

odoo.define('your_module.CustomFormView', function(require) {
    'use strict';

    const FormView = require('web.FormView');
    const viewRegistry = require('web.view_registry');
    const CustomRenderer = require('your_module.CustomRenderer');

    const CustomFormView = FormView.extend({
        config: _.extend({}, FormView.prototype.config, {
            Renderer: CustomRenderer,
        }),
    });

    viewRegistry.add('custom_form_view', CustomFormView);

    return CustomFormView;
});

🧾 3. manifest.py

'assets': {
    'web.assets_backend': [
        'your_module/static/src/js/custom_renderer.js',
        'your_module/static/src/js/custom_view.js',
    ],
},

🧱 4. In your view XML (custom_form_view.xml):

<odoo>
  <record id="your_model_form_view" model="ir.ui.view">
    <field name="name">your.model.form</field>
    <field name="model">your.model</field>
    <field name="arch" type="xml">
      <form string="My Special View" js_class="custom_form_view">
        <sheet>
          <group>
            <field name="your_field_name"/>
          </group>
        </sheet>
      </form>
    </field>
  </record>
</odoo>

πŸ” Important: js_class="custom_form_view" must match the name used in viewRegistry.add().

βœ… Benefits: Modular and clean code.

No interference with other views like Settings or Purchases.

Scalable pattern for adding custom JS to specific form views.

Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Roberto LΓ³pez