我正在尝试解决“基于工作流状态的不同权限”问题,但我正在努力解决这样一个事实,即似乎不可能“随时”获取当前对象的 id,而这是获取该对象的许可。我的意思是,我设法在jquery bbq 文档之后从客户端状态获取它,例如:
$.bbq.getState().id
但看起来这只有在完整的页面加载后才可行。我通过在主视图事件中放置一些警报来对此进行调查,例如:
openerp.web.PageView = openerp.web.PageView.extend({
on_loaded: function(data) {
this._super(data);
alert('page load ' + $.bbq.getState().id);
},
do_show: function() {
this._super();
alert('page show ' + $.bbq.getState().id);
},
reload: function() {
this._super();
alert('page reload ' + $.bbq.getState().id);
},
on_record_loaded: function(record) {
this._super(record);
alert('record loaded ' + $.bbq.getState().id);
}
});
我发现当您打开页面视图时(例如,通过单击搜索视图中的项目),您总是得到“未定义”。
然后,当使用分页导航从一个对象传递到另一个对象时,您可以将其放入“reload”和“on_record_loaded”。然后,当您单击“编辑”按钮时,您会再次错过它。
在表单视图中,我仅在第一次加载时成功获得它,因为似乎一些缓存就位。因此,如果我将一个 pdb 放入 Web 客户端的 fields_view_get 中,然后将其放入“init_view”表单中:
var ids = [];
if ($.bbq.getState().id){
ids = [parseInt($.bbq.getState().id)];
}
console.log(ids);
return this.rpc("/web/view/load", {
"model": this.model,
"view_id": this.view_id,
"view_type": "form",
toolbar: this.options.sidebar,
context: context,
ids: ids,
}, this.on_loaded);
我只在第一次加载页面时得到它。如果我从
this.dataset.ids
我查看了核心 Web 模块的任何地方,但找不到合适的 API,而且看起来很奇怪(尤其是在数据集上),我们没有正确的方法来获取/处理当前记录。甚至上下文和会话也没有任何相关信息。
可能我应该在第一次加载时将其存储到视图本身中......
在此先感谢您的任何指点。