编程语言
首页 > 编程语言> > javascript-如何自定义OpenERP 6.1 WebClient HTML DOM?

javascript-如何自定义OpenERP 6.1 WebClient HTML DOM?

作者:互联网

OpenERP Web客户端的页面可以很宽,在列表视图中有很多列.在短屏幕上,这是一个麻烦,因为居中菜单超出了内容的右侧.我决定为此找到一个快速解决方案:使菜单向左对齐.对于普通网站,这对于标准JQuery来说可谓小菜一碟,但是这个OpenERP网站几乎完全是用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得到了类似主题hooking into the logout event的答案,该主题为我指明了正确的方向,但没有解决我的任务.

解决方法:

我从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"]

尚待解决的问题:

>您是否喜欢此方法并找到合适的方法?
>如果没有,请提供其他解决方案.

我自己觉得这很笨拙,这就是为什么要问.我考虑过使用CSS,但没有设法覆盖表的align属性.

标签:openerp,dom,css,javascript,jquery
来源: https://codeday.me/bug/20191201/2078385.html