Openerp веб-клиент 6.1: как переопределить базовые функции JavaScript - PullRequest
5 голосов
/ 11 января 2012

Я ищу способ переопределить некоторые основные функции openerp web js, такие как "on_logout".

В документации нет инструкций (как вы можете видеть в моем посте ) и модуль helloworld говорит вам, что вы можете сделать это как

openerp.web_hello = function(openerp) {

openerp.web.SearchView = openerp.web.SearchView.extend({
    init:function() {
        this._super.apply(this,arguments);
        this.on_search.add(function(){console.log('hello');});
    }
});

// here you may tweak globals object, if any, and play with on_* or do_* callbacks on them

openerp.web.Login = openerp.web.Login.extend({
    start: function() {
        console.log('Hello there');
        this._super.apply(this,arguments);
    }
});

};

В моем модуле я делаю это:

openerp.mytest = function(openerp){

    openerp.web.WebClient = openerp.web.WebClient.extend({
        on_logout: function() {
            alert('mine');
            [...]
        },
    });
}

Я знаю, что js загружен, так как установка предупреждения вне этого определения работает.

Что здесь не так?

1 Ответ

4 голосов
/ 11 января 2012

Это немного особая проблема, так как вы хотите изменить прототип (класс, если хотите) объекта, который уже создан (экземпляр WebClient является корнем системы, поэтому он, вероятно, уже существуетвремя загрузки кода, поэтому создание нового «класса» WebClient не изменит существующего экземпляра).

В этом случае вы не можете заменить класс подклассом, вам придется заново открытькласс (аналогично Ruby), для этого существует объект include для объектов класса, который должен работать:

openerp.mytest = function(openerp) {
    openerp.web.WebClient.include({
        on_logout: function() {
            alert('mine');
            this._super.apply(this, arguments);
        }
    });
}

(как в Ruby, this._super привязан к методу, который вы заменяете, если таковые имеются, для изменений класса на месте)

Если вы проверяете файл реализации view_list_editable.js, он предоставляет примеры этого, так как ему нужно заново открыть и изменитькод listview для добавления возможности редактирования.

...