我试图在新模块中对某些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节中的例子,但我认为它们不适用于我想要做出的具体改变,或者我要么不做完全理解如何应用更改。
感谢任何帮助,谢谢。
答案 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教程构建扩展界面一天之后你会很清楚如何做到这一点