当前,我正在使用oodo模块,该模块需要有自己的(定制和设计的)仪表板。因此,只有当用户登录到后端(他可以管理应用程序,设置和类似内容)时,该仪表板才会显示。
似乎唯一可行的方法是创建一个单独的控制器,呈现为该控制器/仪表板实现的特定模板,并将其与菜单按钮绑定。
这很好,但是当我们渲染模板时,它是空白的。我想为此模板加载标准的后端菜单-以及在模板主体上的正常工作。
我是否可以继承任何视图,或者可以使用任何方式创建模板,以自动为该模板加载顶部菜单栏?
我试图继承“ web.webclient_bootstrap”模板,并在此模板的主div内附加内容,但无法正常工作。似乎在继承此模板时,session_info为空?
答案 0 :(得分:6)
在研究了odoo源代码之后-与更多参与odoo开发的人们进行了讨论-总体而言-与odoo进行了更多合作-我找到了实现此目的的方法。
最初的问题有一个错误的假设-这可以通过使用控制器进行渲染来实现。需要理解的重要一点是-odoo后端呈现为“单个js页面”,并且仪表板端的任何类型的自定义(您可以在视图中定义的odoo默认不提供)-需要通过直接使用javascript创建js小部件并更改dom对象。
以下解决方案表示仪表板侧的一个操作/页面-它将仅显示“ Test”字样的空白页面。
odoo.define("mymodule.customdashboard", function (require) {
"use strict";
var core = require("web.core");
var AbstractAction = require("web.AbstractAction");
var Widget = require("web.Widget");
var qweb = core.qweb;
var _t = core._t;
require("web.dom_ready");
var CustomDashboard = AbstractAction.extend({
template: "custom_dashboard",
events: {
},
init: function(parent, action){
this._super.apply(this, arguments);
var options = action.params || {};
this.params = options;
},
start: function(){
this.$(".dashboard-wrapper").append(qweb.render("campaign_dashboard_campaign_list", {"someArgData": "Test"}));
}
});
core.action_registry.add("custom.dashboard", CustomDashboard);
return {
CustomDashboard: CustomDashboard
}
});
其中 campaign_dashboard_campaign_list 是要调用的模板的名称,并带有参数,并与所有html数据一起插入包含类 .dashboard-wrapper的dom元素中。 strong>(该类存在于类顶部定义的另一个名为 custom_dashboard 的模板中。