3

OpenERP Web 客户端的页面可以变得非常宽,列表视图中有很多列。在短屏幕上,这是一个麻烦,因为居中的菜单在内容的右侧无法触及。我决定为此找到一个快速解决方案:使菜单与左对齐。对于普通的网站,这对于标准的 JQuery 来说是小菜一碟,但是这个 OpenERP web 的东西几乎完全是用 JS 生成的!

生成的 HTML 具有以下菜单结构:

<div class="menu" id="oe_menu">
  <table align="left">
    <tbody>
      <tr>
        <td>
          <a href="#" data-menu="3">
            Settings
          </a>
        </td>
        <!--other menus...-->
      </tr>
    </tbody>
  </table>
</div>

使用 JQuery 的方法是(在 JS 控制台中测试):

$('div.menu table[align=center]').attr('align','left');

虽然通常的$(document).ready()会失败,因为加载 DOM 的时间只是 OpenERP Web 客户端的初始化。

我的要求是这需要从一个模块进行管理。Simahawk 得到了类似主题的答案 -连接到注销事件,这为我指明了正确的方向,但没有解决我的任务。

4

1 回答 1

3

我从 web_livechat 模块中找到并修改了一段代码,最终成功了。我的模块叫做camara,这很重要,因为 openerp 对象的新方法必须在你的模块之后调用 - static/src/js/tweaks.js:

// openerp.camara(openerp) is executed when the module is loaded - UI is not rendered yet!

openerp.camara = function(openerp) {

    // so we hook into (override) the Header do_update() call 
    // which is executed upon session validation by the WebClient
    // we have to call the overriden parent method
    // then we hook onto the update_promise 
    // which executes our code after the update is done.

    openerp.web.Header.include({
        do_update: function() {
        var self = this;
        this._super();
        this.update_promise.then(function() {
            // change menu alignment to the left
            // because with wide views, it runs out of reach
            $('div.menu table[align=center]').attr('align','left')
        });
        }
    });

}

js 文件需要包含在__ openerp __ .py 中:

'js': ["static/src/js/tweaks.js"]

剩下的问题:

  • 你喜欢这个并认为它是一种合适的方法吗?
  • 如果没有,请提供其他解决方案。

I myself find this rather clumsy, that's why I ask. I thought of using CSS but did not manage to override the table's align attribute.

于 2012-07-02T20:50:33.287 回答