0

嗨,这个问题与我自己的答案有关,问题是部件只运行一次,当第一个数据库记录对象显示在表单视图上时,但是当我更改为另一条记录时,视图不会用实际记录更新. 我认为那是因为我在“开始”中运行了所有代码,但我不知道如何以及在何处放置他的代码来执行此操作。

再次代码:

(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);
4

1 回答 1

2

在您的启动功能中:

this._ic_field_manager.on('view_content_has_changed', this, function() {
    'put your code here'
 })

编辑:

实际上还有另一个你可以听的事件,'load_record'。因为每次修改视图中的单个字段时都会触发“view_content_has_changed”,您可能不希望这种行为。

于 2017-02-07T17:46:17.050 回答