odoo,如何在每个数据库记录表单视图上重新加载小部件?
odoo, how to reload widget on every db record form view?
你好,这个问题与我自己的回答有关 问题是小部件 运行 只有一次,当第一个数据库记录对象显示在表单视图上时,但是当我更改时对于另一条记录,视图未使用实际记录更新。我认为那是因为我 运行 ‘start’ 中的所有代码,但我不知道如何以及在哪里放置他的代码来执行此操作。
再次代码:
(function (instance) {
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
openerp.chess_base = function (instance, local) {
local.ShowBoard = instance.web.form.FormWidget.extend({
start: function () {
this.$el.append('<div id="board" style="width: 300px">BOARD GOES HERE</div>');
this.show_board();
},
show_board: function () {
var Game = new instance.web.Model("chess.game"),
record_id = this.field_manager.datarecord.id,
record_name = this.field_manager.datarecord.name,
self = this;
self.el_board = self.$('#board');
Game.query(['pgn']).filter([['id', '=', record_id], ['name', '=', record_name]]).all().then(function (data) {
console.log(data);
self.cfg = {
position: data[0].pgn,
orientation: 'white',
pieceTheme: '/chess_base/static/img/chesspieces/wikipedia/{piece}.png'
};
ChessBoard(self.el_board, self.cfg);
});
}
});
instance.web.form.custom_widgets.add('board', 'instance.chess_base.ShowBoard');
}
})(openerp);
在您的 start 函数中:
this._ic_field_manager.on('view_content_has_changed', this, function() {
'put your code here'
})
编辑:
实际上还有一个事件你可以听,'load_record'。
因为每次修改视图中的单个字段时都会触发 'view_content_has_changed',您可能不希望出现这种情况。
你好,这个问题与我自己的回答有关
再次代码:
(function (instance) {
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
openerp.chess_base = function (instance, local) {
local.ShowBoard = instance.web.form.FormWidget.extend({
start: function () {
this.$el.append('<div id="board" style="width: 300px">BOARD GOES HERE</div>');
this.show_board();
},
show_board: function () {
var Game = new instance.web.Model("chess.game"),
record_id = this.field_manager.datarecord.id,
record_name = this.field_manager.datarecord.name,
self = this;
self.el_board = self.$('#board');
Game.query(['pgn']).filter([['id', '=', record_id], ['name', '=', record_name]]).all().then(function (data) {
console.log(data);
self.cfg = {
position: data[0].pgn,
orientation: 'white',
pieceTheme: '/chess_base/static/img/chesspieces/wikipedia/{piece}.png'
};
ChessBoard(self.el_board, self.cfg);
});
}
});
instance.web.form.custom_widgets.add('board', 'instance.chess_base.ShowBoard');
}
})(openerp);
在您的 start 函数中:
this._ic_field_manager.on('view_content_has_changed', this, function() {
'put your code here'
})
编辑:
实际上还有一个事件你可以听,'load_record'。 因为每次修改视图中的单个字段时都会触发 'view_content_has_changed',您可能不希望出现这种情况。