在odoo 9中添加js

Add js in odoo 9

我想在销售点扩展 OrderWidget 并在 h2 标签之间显示日期。

  <script>
    var d = new Date();
    var strDate = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();
    $("#div1").load(strDate);
  </script>

OrderWidget的模板我是这样继承的

<?xml version="1.0" encoding="UTF-8"?>
  <templates id="template" xml:space="preserve">
  <t t-extend="OrderWidget" >
  <t t-jquery=".order-empty" t-operation="append">
            <h2 id="div1"></h2>
  </t>
  </t>
  </templates>

我可以把上面例子中的脚本放在哪里?

您正确继承了 OrderWidget 模板。

    <?xml version="1.0" encoding="UTF-8"?>
    <templates id="template" xml:space="preserve">
          <t t-extend="OrderWidget" >
              <t t-jquery=".order-empty" t-operation="append">
                <h2><span t-esc="strDt"/></h2>
              </t>
          </t>
    </templates>

所以,现在您需要将日期设置在 <h2 id="div1"></h2>

之间

您可以像这样包含 OrderWidget。

然后您需要创建一个 .js 文件来包含您的自定义代码,比方说 order_extend.js。

odoo.define('your_module.order_extend', function (require) {
"use strict";
var screens =  require('point_of_sale.screens');
var core = require('web.core');
var QWeb = core.qweb;
var _t = core._t;

screens.OrderWidget.include({
renderElement: function(scrollbottom){
    var order  = this.pos.get_order();
    if (!order) {
        return;
    }
    var orderlines = order.get_orderlines();

    var d = new Date();
    var strDate = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();
    var el_str  = QWeb.render('OrderWidget',{widget:this, order:order, orderlines:orderlines,strDt:strDate});

    var el_node = document.createElement('div');
        el_node.innerHTML = _.str.trim(el_str);
        el_node = el_node.childNodes[0];


    var list_container = el_node.querySelector('.orderlines');
    for(var i = 0, len = orderlines.length; i < len; i++){
        var orderline = this.render_orderline(orderlines[i]);
        list_container.appendChild(orderline);
    }

    if(this.el && this.el.parentNode){
        this.el.parentNode.replaceChild(el_node,this.el);
    }
    this.el = el_node;
    this.update_summary();

    if(scrollbottom){
        this.el.querySelector('.order-scroller').scrollTop = 100 * orderlines.length;
    }

},
});

    });

而您需要通过 xml 文件将 js 文件添加到 pos 后端。

例如。 template.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>

        <template id="assets" inherit_id="point_of_sale.assets">
          <xpath expr="." position="inside">
           <script type="text/javascript" src="/your_module/static/src/js/order_extend.js"></script>
          </xpath>
        </template>

    </data>
</openerp>

而这个xml文件template.xml你需要像这样在openerp.py文件的数据部分添加。

...
'data': [
       ...
       ...
        'views/template.xml',
    ],
....

希望这个回答对您有用。