如何修改具有继承类的类的方法?

时间:2015-11-19 09:04:57

标签: javascript inheritance openerp

我想通过 self.drawer.toggle(e!=='form')修改此行 self.drawer.toggle(e ==='graph') 该类的方法“start”:

instance.web.SearchView = instance.web.Widget.extend({
    template: "SearchView",
    start: function() {
        var self = this;
        var p = this._super();
        this.$view_manager_header = this.$el.parents(".oe_view_manager_header").first();
        this.setup_global_completion();
        this.query = new my.SearchQuery()
                .on('add change reset remove', this.proxy('do_search'))
                .on('change', this.proxy('renderChangedFacets'))
                .on('add reset remove', this.proxy('renderFacets'));
        if (this.options.hidden) {
            this.$el.hide();
        }
        if (this.headless) {
            this.ready.resolve();
        } else {
            var load_view = instance.web.fields_view_get({
                model: this.dataset._model,
                view_id: this.view_id,
                view_type: 'search',
                context: this.dataset.get_context(),
            });

this.alive($.when(load_view)).then(function (r) { self.fields_view_get.resolve(r); return self.search_view_loaded(r); }).fail(function () { self.ready.reject.apply(null, arguments); }); } var view_manager = this.getParent(); while (!(view_manager instanceof instance.web.ViewManager) && view_manager && view_manager.getParent) { view_manager = view_manager.getParent(); } if (view_manager) { this.view_manager = view_manager; view_manager.on('switch_mode', this, function (e) { self.drawer.toggle(e === 'graph'); }); } return $.when(p, this.ready); },

我是否要覆盖新课程中的所有行,还是有其他方式?

1 个答案:

答案 0 :(得分:0)

我建议最好的想法是让你的类的构造函数以该名称作为参数。

我不熟悉您正在使用的库,但就经典继承而言,您的类看起来像这样。

class SearchView extends Widget {
  constructor(name='graph') {
    this.name = name;

    view_manager.on('switch_mode', this, function (e) {
      self.drawer.toggle(e === this.name);
    });
  }
}

默认情况下,这会创建使用'graph'的实例,如果您想要使用'form'的实例,那么您将执行以下操作:

var searchView = new SearchView('form');

您不需要将其子类化。