GJS为数组定义GObject属性的正确方法是什么?

时间:2017-08-21 00:04:03

标签: javascript gobject gnome-shell-extensions gjs

我在GJS GObject overrides中看到大多数类型的定义都与Javascript类型相对应,但是我应该如何为标准的字符串数组定义属性?我遇到的一些选择:

  • 使用TYPE_OBJECT和GList,但是当我检索它时GJS会将它映射到数组吗?
  • 使用TYPE_OBJECT和GVariant与"作为"自己打字并打开包装
  • 使用TYPE_BOXED和TYPE_ARRAY,但TYPE_ARRAY是否与Javascript的数组类型相当?

1 个答案:

答案 0 :(得分:3)

目前无法实现。订阅https://bugzilla.gnome.org/show_bug.cgi?id=727787以便在有进展时收到通知。

我过去成功使用了第二个选项(类型为as的GVariant)。 GList选项不起作用,因为GJS不关注GList中存储的值的类型。我不确定的第三种选择。

这是一个显示如何使用GVariant选项的最小示例:

const GObject = imports.gi.GObject;
const GLib = imports.gi.GLib;

const MyClass = GObject.registerClass({
    Properties: {
        'prop': GObject.param_spec_variant('prop', 'Prop', 'Prop',
            new GLib.VariantType('as'), null,
            GObject.ParamFlags.READABLE),
    },
}, class MyClass extends GObject.Object {
    get prop() {
        return new GLib.Variant('as', ['one', 'two']);
    }
});

print(new MyClass().prop.deep_unpack());

(如果您没有使用新的类语法,它仍然以与旧Lang.Class类似的方式工作。)