目前,我正在研究odoo模块,该模块需要有自己的(定制和设计的)仪表板。因此,只有当用户登录到后端(他可以管理应用程序,设置和类似内容)时,该仪表板才可见。
似乎唯一可行的方法是创建一个单独的控制器,渲染为该控制器/仪表板实现的特定模板,并将其与菜单按钮绑定。
没关系,但是当我们渲染模板时,它是空白的。我想为此模板加载标准的后端菜单-并在模板主体上正常工作。
我可以继承任何视图,也可以使用任何方式创建模板,以自动为该模板加载顶部菜单栏吗?
我试图继承“ web.webclient_bootstrap ”模板,并在此模板的主要div内附加内容,但无法正常工作。似乎在继承此模板时,session_info为空?
在研究了odoo源代码之后-与更多参与odoo开发的人们进行了讨论-总体而言-与odoo进行了更多合作-我找到了实现此目的的方法。
最初的问题有一个错误的假设-这可以通过使用控制器进行渲染来实现。需要了解的重要一点是-odoo后端呈现为“单个js页面”,并且仪表板端的任何类型的自定义(odoo默认不提供,您可以在视图中定义)-需要通过以下方式完成创建js小部件并直接使用javascript更改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
}
});
Run Code Online (Sandbox Code Playgroud)
Where campaign_dashboard_campaign_list is name of the template WHICH is going to be invoked AND with parameter, inserted with all of the html data into the dom element which contains class .dashboard-wrapper (which exists in another template called custom_dashboard defined at the top of the class.
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |