【问题标题】:How is modifying _init() affecting parent()?修改 _init() 如何影响 parent()?
【发布时间】:2015-11-29 10:34:52
【问题描述】:

我正在尝试更新 Gnome-shell 扩展。在其中,我重写了一个对象的 _init 方法,我正在这样做:

function newInitAppSwitcherPopup() {
     this.parent();        
     ...
}
AltTab.AppSwitcherPopup.prototype._init = newInitAppSwitcherPopup;

新方法失败:

JS 错误:TypeError:方法'parent'不能被调用

我在这里发现非常令人惊讶的是parent 方法确实存在(如果我更改名称,我会收到“未定义”错误)。

我不明白的是,原来的 AppSwitcherPopup._init 仍在使用这个对父级的调用 (https://git.gnome.org/browse/gnome-shell/tree/js/ui/altTab.js?h=gnome-3-16#n54)。

这在 Gnome 3.12 下运行良好,但在 Gnome 3.16 下就坏了……我猜他们在 GObject 或继承模型中改变了一些东西?

【问题讨论】:

    标签: javascript gnome-shell gnome-shell-extensions


    【解决方案1】:

    我的配置小部件有类似的代码

    const MenuConfigWidget = new GObject.Class({
      Name: 'SimpleMenu.Prefs.MenuConfigWidget',
      GTypeName: 'SimpleMenuMenuConfigWidget',
      Extends: Gtk.Grid,
    
      _init: function(params) {
        this.parent({... }); 
        ...
      }
    });
    

    您是否扩展了我们刚刚为 _init 函数打补丁的类?

    【讨论】:

    • 正如您在提供的代码中看到的那样,我只是通过原型修改 _init 函数...您是否建议改为扩展类?
    • 不确定是否是问题所在。另一种可能性是,GObject javascript introspection 添加了某种检查,防止您在不提供适当参数的情况下调用 parent()。
    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多