【问题标题】:How to modify a method of a class with a inherited class?如何修改具有继承类的类的方法?
【发布时间】:2015-11-19 09:04:56
【问题描述】:

我想将这一行 self.drawer.toggle(e === 'graph') 修改为 self.drawer.toggle(e !== 'form')时间> 此类的方法“开始”:

instance.web.SearchView = instance.web.Widget.extend({
    模板:“搜索视图”,
    开始:函数(){
        变种自我=这个;
        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('添加更改重置删除', this.proxy('do_search'))
                .on('change', this.proxy('renderChangedFacets'))
                .on('添加重置删除', this.proxy('renderFacets'));
        如果(this.options.hidden){
            this.$el.hide();
        }
        如果(this.headless){
            this.ready.resolve();
        } 别的 {
            var load_view = instance.web.fields_view_get({
                模型:this.dataset._model,
                view_id: this.view_id,
                view_type: '搜索',
                上下文: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);
    },

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

【问题讨论】:

    标签: javascript inheritance openerp


    【解决方案1】:

    我建议最好的办法是允许您的类的构造函数将该名称作为参数。

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

    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');
    

    你不需要继承它。

    【讨论】:

    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多