定义组件时组合模式属性类型

时间:2017-05-22 08:36:16

标签: javascript aframe

我正在编写一个可以接受vec3作为模式属性的组件:

AFRAME.registerComponent('control-arrows', {
    schema: {
        'directions': {
            'type': 'array',
            'default': [
                {'x':  1, 'y': 0, 'z':  0},
                {'x': -1, 'y': 0, 'z':  0},
                {'x':  0, 'y': 0, 'z':  1},
                {'x':  0, 'y': 0, 'z': -1}
            ]
        }
    },
    /* init and stuff */
}

如示例中所示,我使用了类型array。但是,此类型不够严格,因为它应该是array vec3。请注意,vec3的数量可能会有所不同,因此我无法使用vec3类型的4个属性。

如何执行此类限制?更具体地说,如何正确解析HTML部分,可能是:

<a-entity
    control-arrows: "positions: 1 0 1, -1 0 -1">
</a-entity>

1 个答案:

答案 0 :(得分:1)

您可以创建自定义属性类型:https://aframe.io/docs/0.5.0/core/component.html#custom-property-type

schema: {
    'directions': {
        'parse': function (val) {
           return val.split(',').map(AFRAME.utils.coordinates.parse);
        },
        'default': [
            {'x':  1, 'y': 0, 'z':  0},
            {'x': -1, 'y': 0, 'z':  0},
            {'x':  0, 'y': 0, 'z':  1},
            {'x':  0, 'y': 0, 'z': -1}
        ]
    }
},