我有一个扩展当前项目视图的视图,我们在其中添加多个选项卡(笔记本页面)以显示项目其他部分的信息。
其中一个页面是概述页面,总结了其他选项卡下的内容,我想将每个部分的标题直接链接到每个显示的页面。我目前通过使用每个选项卡的索引并在选项卡中的链接上调用bootstrap的.tab('show')
方法来解决这个问题:
$(".overview-link").click(function (e) {
e.preventDefault();
var sel = '.nav-tabs a:eq(' + $(this).data('tab-index') + ')';
$(sel).tab('show');
});
这是有效的,因为我已将data-tab-index="<int>"
附加到我的窗口小部件代码中的每个标头链接,但它很脆弱 - 如果有人稍后添加标签,则当前索引将被破坏。之前我依靠每个标签上的锚点,但也破坏了(如果插入了新的笔记本页面,也可能会破坏)。
直接触发Web客户端重定向/表单链接有效,但我想在视图中显示特定页面:
this.do_action({
type: 'ir.actions.act_window',
res_model: 'my.model.name',
res_id: 'my.object.id',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
target: 'current'
});
有没有办法通过do_action
方法或类似的方法将Web客户端直接链接/重定向到特定的笔记本页面选项卡?
答案 0 :(得分:1)
如果我理解你想要从JavaScript(jQuery)FormWidget中选择选项卡,考虑到如果任何人安装另一个添加另一个选项卡的模块,则id可能会改变
您可以在xml表单视图中的page
中添加一个类。您可以使用此类名选择的元素的id来调用右锚并选择正确的选项卡项。这应该在页面完全加载时发生:
<page class="nb_page_to_select">
$('a[href=#' + $('.nb_page_to_select').attr('id') + ']').click()
注意:正如您所说的以下段落我假设您知道在哪里运行此指令。我建议的解决方案与索引无关。
这是有效的,因为我已经为每个人附加了
data-tab-index="<int>"
我的小部件代码中的标题链接,但它很脆弱 - 如果有人添加了 标签后,当前指数将被打破。早些时候我依靠 锚定在每个标签上,但也破坏了(并且可能会破坏 如果还插入了新的笔记本页面。
加载页面后,您可以像这样获取选项卡列表DOM对象:
var tablist = $('ul[role="tablist"]')
然后您可以单击特定选项卡,按锚点内的文本进行选择。所以你不依赖于标签索引:
tablist.find('a:contains("Other Information")').click()
我认为如果你有两个带有相同文字的标签没有任何意义,那么这应该足够了。
即使您想要更具体,也可以在笔记本中添加一个类,以确保您使用的笔记本正确
<notebook class="nt_to_change">
现在您可以使用其中一个表达式来选择选项卡列表
var tablist = $('div.nt_to_change ul.nav-tabs[role="tablist"]')
// or
var tablist = $('div.nt_to_change ul[role="tablist"]')
如果contains
选择器不能说服你,因为它应该相等,你也可以这样做来比较和过滤
tablist.find('a').filter(function() {
return $.trim($(this).text()) === "Other Information";
}).click();
其中"Other Information"
是笔记本页面的字符串
答案 1 :(得分:0)
我没有尝试过我给你的解决方案,但如果它不起作用,至少可能会让你想出一些想法。
有一个名为autofocus
的XML元素的参数(对于按钮和字段为default_focus
,取值为1或0)。如果您将autofocus="autofocus"
添加到XML页面中,则在打开视图时将显示此页面。
所以,你可以尝试通过JavaScript添加这个,当用户点击相应的链接时 - 老实说,我现在不知道如何实现这一点。但您可以为XML中的每个链接添加独特的context
参数,例如context="{'page_to_display': 'page x'}"
。当您单击链接时,我希望这些上下文键将到达您的JS方法。
如果没有,您还可以修改fields_view_get
方法(在此我写了如何执行此操作:Odoo - Hide button for specific user),以检查您是否获得了已添加到链接的上下文并添加{ {1}}相应页面的参数。
答案 2 :(得分:0)
正如你所说:
这是有效的,因为我已经将data-tab-index =“”附加到每个标题 在我的小部件代码中链接,但它很脆弱 - 如果有人添加了一个标签 之后,目前的指数将被打破。
我认为您的应用程序允许实时多用户交互,因此您必须在代码中的某处集成更新部件功能。
如果某些内容发生了变化,此函数将触发并清除数据以重建索引,以避免当前索引被破坏。