odoo 10 - "覆盖"来自旧模块的Javascript代码

时间:2017-09-28 14:40:01

标签: javascript openerp odoo-10

我试图在新模块中对某些javascript进行更改,但我无法理解我的错误。

https://github.com/odoo/odoo/blob/10.0/addons/hr_attendance/static/src/js/kiosk_confirm.js

这是我尝试更改的代码,特别是此代码段:

this.next_action = 'hr_attendance.hr_attendance_action_kiosk_mode';

这是我到目前为止所获得的代码,我认为是最接近正确的迭代:

odoo.define('tko_hr_attendance.script', function(require) {
"use strict";

var core = require('web.core');
var Model = require('web.Model');
var Widget = require('web.Widget');

var QWeb = core.qweb;
var _t = core._t;


instance.web.WebClient.include({


    init: function (parent, action) {
        this._super.apply(this, arguments);
        this.next_action = 'mail.mail_channel_action_client_chat';
        return this._super();
        },
    });
});

这是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <template id="assets_backend_custom_id" name="tko_hr_attendance assets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/tko_hr_attendance/static/src/js/script.js"></script>
        </xpath>
    </template>
</odoo>

我尝试过第8,9和10节中的例子,但我认为它们不适用于我想要做出的具体改变,或者我要么不做完全理解如何应用更改。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

要覆盖init,首先需要获取该类,并在最后的代码中看到它们放在这里

import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/mergeMap'
// ...

@Injectable()
export class CoursesService {
  baseUrl$: Observable<string>;

  constructor(private http: Http) {
      this.baseUrl$ =
          this.getJSON()
              .share()
  }

  public getJSON(): Observable<any> {
      return this.http.get("assets/apiDetails.json")
         .map((res: any) => res.json());
  }

  getCourses(): Observable<YourCourseType[]> {
      return this.baseUrl$
          .mergeMap(url => {
              return this.http.get(url + "/courses")
                  .map((res: any) => res.json());
          });
  }
}

他们将它添加到action_registry,你应该使用相同的密钥。

   core.action_registry.add('hr_attendance_kiosk_confirm', KioskConfirm);

然后使用include来覆盖init方法,但在大多数情况下你应该总是调用super。

            var  KioskConfirm = core.action_registry.get('hr_attendance_kiosk_confirm');

要了解javascript阅读odoo教程构建扩展界面一天之后你会很清楚如何做到这一点