odoo 11中的小部件创建错误(js升级到odoo 11的问题)

时间:2018-11-02 06:21:49

标签: javascript xml widget odoo odoo-11

我正在尝试向我的项目后端添加房间预订摘要,我在odoo 10中使用了以下代码,但收到了错误 Uncaught TypeError:Widget不是构造函数。我已经尝试了不同的解决方案,但还没有解决我的问题。谢谢。

I'm trying to display like this

这是我对应的js代码

odoo.define('hotel_reservation.hotel_room_summary', function (require) {

var core = require('web.core');
var data = require('web.data');
var ActionManager = require('web.ActionManager');
var form_common = require('web.form_common');
var time = require('web.time');
var _t = core._t;
var QWeb = core.qweb;

var RoomSummary = form_common.FormWidget.extend(form_common.ReinitializeWidgetMixin, {
        display_name: _t('Form'),
        view_type: "form",
        init: function() {
            this._super.apply(this, arguments);
            if(this.field_manager.model == "room.reservation.summary")
            {
                $(".oe_view_manager_buttons").hide();
                $(".oe_view_manager_header").hide();
               }
            this.set({
                date_to: false,
                date_from: false,
                summary_header: false,
                room_summary: false,
            });
            this.summary_header = [];
            this.room_summary = [];
            this.field_manager.on("field_changed:date_from", this, function() {
                this.set({"date_from": time.str_to_datetime(this.field_manager.get_field_value("date_from"))});
            });
            this.field_manager.on("field_changed:date_to", this, function() {
                this.set({"date_to": time.str_to_datetime(this.field_manager.get_field_value("date_to"))});
            });

            this.field_manager.on("field_changed:summary_header", this, function() {
                this.set({"summary_header": this.field_manager.get_field_value("summary_header")});
            });
            this.field_manager.on("field_changed:room_summary", this, function() {
                this.set({"room_summary":this.field_manager.get_field_value("room_summary")});
            });
        },

        initialize_field: function() {

            form_common.ReinitializeWidgetMixin.initialize_field.call(this);
            var self = this;
            self.on("change:summary_header", self, self.initialize_content);
            self.on("change:room_summary", self, self.initialize_content);
        },

      initialize_content: function() {
           var self = this;
           if (self.setting)
               return;

           if (!this.summary_header || !this.room_summary)
                  return
           // don't render anything until we have summary_header and room_summary

           this.destroy_content();

           if (this.get("summary_header")) {
            this.summary_header = py.eval(this.get("summary_header"));
           }
           if (this.get("room_summary")) {
            this.room_summary = py.eval(this.get("room_summary"));
           }

           this.renderElement();
           this.view_loading();
        },

        view_loading: function(r) {
            return this.load_form(r);
        },

        load_form: function(data) {
            self.action_manager = new ActionManager(self);
        },

        renderElement: function() {
             this.destroy_content();
             this.$el.html(QWeb.render("summaryDetails", {widget: this}));
        }     
    });

core.form_custom_registry.add('Room_Reservation', RoomSummary);
});

而xml是

<!-- Form view of room reservation summary -->
<record id="room_reservation_summary_form_view" model="ir.ui.view">
    <field name="name">room.reservation.summary.form</field>
    <field name="model">room.reservation.summary</field>
    <field name="arch" type="xml">
        <form string="Reservation Summary">
            <sheet>
                <group colspan="4" col="4">
                    <div>
                        <label for="date_from" string="Summary Period" />
                        <field name="date_from" class="oe_inline" />
                        to
                        <field name="date_to" class="oe_inline" />
                    </div>
                </group>
                <notebook>
                    <page string="Room Summary">
                        <field name="summary_header" colspan="4" invisible="1" />
                        <field name="room_summary" colspan="4" invisible="1" />
                        <widget type="Room_Reservation"></widget>
                    </page>
                </notebook>
            </sheet>
        </form>
    </field>
</record>

1 个答案:

答案 0 :(得分:0)

似乎在v11中已更改。尝试这样做:

注册自定义窗口小部件:

require('web.widget_registry').add('room_reservation', RoomSummary);

使用方式:

<widget name="room_reservation"/>