我正在努力“基于工作流程状态的不同权限” https://stackoverflow.com/questions/10994216/different-permissions-based-on-workflow-state问题,但我正在努力解决这样一个事实:似乎不可能“随时”获取当前对象的 id,而这是获得该对象的许可所必需的。我的意思是我设法从客户端状态获取它以下 jquery bbq 文档 http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html#jQuery.bbq.getState like:
$.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);
}
});
我发现当您打开页面视图(例如,通过单击搜索视图中的项目)时,您会得到always“不明确的”。
然后,当使用分页导航从一个对象传递到另一个对象时,您可以将其放入“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);
我只在第一次加载页面时才得到它。如果我从中获取 id,也会发生同样的情况
this.dataset.ids
我查看了核心 Web 模块的任何位置,但找不到合适的 API,而且看起来很奇怪(尤其是在数据集上),我们没有正确的方法来获取/处理当前记录。甚至上下文和会话也没有任何相关信息。
也许我应该在第一次加载时将其存储到视图本身中......
预先感谢您的任何指点。