/** * Client-side implementation of a qweb view. */ odoo.define('web.qweb', function (require) { "use strict"; var core = require('web.core'); var AbstractView = require('web.AbstractView'); var AbstractModel = require('web.AbstractModel'); var AbstractRenderer = require('web.AbstractRenderer'); var AbstractController = require('web.AbstractController'); var registry = require('web.view_registry'); var _lt = core._lt; /** * model */ var Model = AbstractModel.extend({ /** * init */ init: function () { this._super.apply(this, arguments); this._state = { viewId: false, modelName: false, body: '', context: {}, domain: [], }; }, /** * fetches the rendered qweb view */ _fetch: function () { var state = this._state; return this._rpc({ model: state.modelName, method: 'qweb_render_view', kwargs: { view_id: state.viewId, domain: state.domain, context: state.context } }).then(function (r) { state.body = r; return state.viewId; }); }, /** * get */ __get: function () { return this._state; }, /** * load */ __load: function (params) { _.extend(this._state, _.pick(params, ['viewId', 'modelName', 'domain', 'context'])); return this._fetch(); }, /** * reload */ __reload: function (_id, params) { _.extend(this._state, _.pick(params, ['domain', 'context'])); return this._fetch(); } }); /** * renderer */ var Renderer = AbstractRenderer.extend({ /** * render */ _render: function () { var self = this; return this._super.apply(this, arguments).then(function () { self.$el.html(self.state.body); }); } }); /** * controller */ var Controller = AbstractController.extend({ events: _.extend({}, AbstractController.prototype.events, { 'click [type="toggle"]': '_onLazyToggle', 'click [type="action"]' : '_onActionClicked', }), init: function () { this._super.apply(this, arguments); }, /** * @override */ renderButtons: function ($node) { this.$buttons = $('