2017-07-24 74 views
1

我想在我的架构两个自定义属性,有一个备用的值,如果没有定义它们,或者如果他们的价值是低于0.0AFRAME自定义组件,在架构结果自定义属性错误

这是模式:

schema: { 
    url: { type: 'string'}, 
    key: { type: 'string'}, 
    intensity: { 
    // default is -100 to trigger fallback 
    default: -100, 
    parse: function (value) { 
     if (value >= 0.0) { 
     return value 
     } 
     return -100 
    } 
    } 
} 

给我的问题属性是强度属性。 如果是在一个实体

<a-entity io3d-data3d="key: mykey; lightMapIntensity: 1.0" shadow="receive: true"></a-entity>

值正确组件使用,但是当我打开一帧3D编辑器,然后单击实体定义 - 我得到这个错误:

A-frame error

这并没有发生,如果属性未在a-entity设置。

我在使用自定义属性时做错了什么? 有没有一种方法来定义可选属性,有未定义或空作为默认值?

自定义属性类型:

https://aframe.io/docs/0.6.0/core/component.html#custom-property-type

+0

你试图通过的强度是什么? –

+0

回答

3

a-frame检查器尝试使用toFixed(decimalPlaces)函数对值进行取整。

组件中传递的值是字符串,据我所知,toFixed()不适用于字符串,至少不是在我的实验中,也不在documentation中。

一个简单的解决方案是返回一个解析值:

if (value >= 0.0) { 
    return parseFloat(value); 
} 

虽然花车比较字符串时,它做一些额外的解析,您可能希望在检查之前解析值:

value = parseFloat(value); 
if (value >= 0.0) { 
    return value);  
} 
+0

谢谢!由于某种原因,我没有想到这么远,它花了我一段时间:) –

+0

@MadlainaKalunder没有问题:)我得到了如此的困难,它不工作只有当从检查员访问实体,我需要挖掘有点:)很高兴我可以帮助:) –

0

好了,所以我发现我的模式试图解析我的财产作为字符串。 我想这是回退,如果你没有定义类型?

lightMapIntensity: { 
    // default is -100 to trigger fallback to value specified in data3d file 
    type:'float', 
    default:-100.0, 
    parse: function (value) { 
    if (parseFloat(value) >= 0.0) { 
     return parseFloat(value) 
    } 
    return -100.0 // = fallback to value from data3d file 
    } 
} 

至少我没有这个错误了。

也许有人有更好的答案。

+0

迟到了一点,但你明白了:) –

+0

是的,解析函数的全部目的是解析字符串。 – ngokevin