2

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

  • 使用 TYPE_OBJECT 和 GList,但是当我检索它时,GJS 会将它映射到一个数组吗?
  • 使用 TYPE_OBJECT 和带有“as”类型的 GVariant 并自己解压
  • 使用 TYPE_BOXED 和 TYPE_ARRAY,但是 TYPE_ARRAY 是否可以与 Javascript 的 Array 类型相媲美?
4

1 回答 1

3

目前这是不可能的。订阅https://bugzilla.gnome.org/show_bug.cgi?id=727787以在有进展时收到通知。

我过去曾成功使用过第二个选项(带有 typeas的 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.

于 2017-08-24T02:21:03.063 回答