3

OpenERP Web クライアントのページは、リスト ビューに多くの列があると非常に広くなることがあります。短い画面では、中​​央のメニューがコンテンツの右側に届かないため、これは問題です。私はこれに対する簡単な修正を見つけることにしました: Make the menu align to left . 通常の 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"]

残りの質問:

  • あなたはこれが好きで、適切なアプローチだと思いますか?
  • そうでない場合は、他の解決策を提供してください。

私自身、これはかなり不器用だと思うので、質問します。CSS の使用を考えましたが、テーブルの align 属性をオーバーライドできませんでした。

于 2012-07-02T20:50:33.287 に答える