2016-11-09 5 views
0

안녕하세요이 질문은 내 자신의 대답과 관련이있다 here 첫 번째 데이터베이스 레코드 개체가 양식보기에 표시되면 위젯이 한 번만 실행되지만 다른 레코드로 변경하면보기가 실제 기록. 나는 그것이 '시작'에서 모든 코드를 실행하기 때문에 그것이라고 생각하지만, 어떻게 그리고 어디서 코드를 작성했는지는 모른다. 다시odoo, 모든 db 레코드 형식보기에서 위젯을 다시로드하는 방법?

코드 :에서

(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); 
+1

나는 이와 같은 문제가 과거에 발생했습니다. 나는 정말로 감명을받은 해결책을 찾지 못했다. 그러나 브라우저의 '해시'에서 변경 사항을 바인딩하고 이벤트를 처리 한 다음 show_board 함수가 실행되면 다시 실행하는지 확인할 수 있습니다. 코드를 찾으면 코드를 게시하십시오. 또는 나보다 훨씬 똑똑한 사람이 답을 게시 할 수 있기를 바랍니다. –

답변

2

당신의 기능을 시작 :

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

편집 :

사실 당신이들을 수있는 다른 이벤트, 'load_record'이있다. 보기의 단일 필드가 수정 될 때마다 'view_content_has_changed'이 트리거되므로이 동작을 원하지 않을 수 있습니다.