2017-07-24 2 views
1

Je veux avoir deux propriétés personnalisées dans mon schéma, qui ont une valeur de repli si elles ne sont pas définis, ou si leur valeur est inférieure à 0,0composant Aframe personnalisé, propriété personnalisée dans les résultats de schéma dans l'erreur

c'est le schéma:

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 
    } 
    } 
} 

La propriété qui me pose des problèmes est la propriété d'intensité. Si elle est définie dans l'une entité

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

la valeur est correctement utilisée par le composant, mais quand j'ouvre l'éditeur 3d un cadre et cliquez sur l'entité - je reçois cette erreur :

A-frame error

cela ne pas se produire, si les attributs ne sont pas définis dans a-entity.

Est-ce que je fais quelque chose de mal lors de l'utilisation de propriétés personnalisées? Existe-t-il un moyen de définir des propriétés facultatives dont la valeur par défaut est null ou null?

sur mesure Type de propriété:

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

+0

Quelle est la valeur que vous essayez de transmettre en tant qu'intensité? –

+0

Répondre

3

L'inspecteur de châssis tente d'arrondir les valeurs à l'aide de la fonction toFixed(decimalPlaces).

Les valeurs passées dans le composant sont des chaînes, et pour autant que je sache, toFixed() ne fonctionne pas avec des chaînes, au moins pas dans mes expériences, ni dans le documentation.

Une solution simple est de renvoyer une valeur analysée:

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

Bien que lorsque l'on compare les chaînes de flotteurs, il fait une analyse supplémentaire, vous pouvez analyser la valeur avant la vérification:

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

merci! pour quelque raison je ne pensais pas cela loin et il m'a fallu un peu plus longtemps :) –

+0

@MadlainaKalunder pas de problème :) Je me suis tellement bousculé que cela ne fonctionnait pas seulement lors de l'accès à l'entité de l'inspecteur, que je devais creuser un peu :) heureux je pourrais aider :) –

0

Bon alors j'ai remarqué que mon schéma a essayé d'analyser ma propriété en tant que chaîne. Je suppose que c'est le repli, si vous ne définissez pas un type?

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 
    } 
} 

Au moins, je n'ai plus l'erreur.

Peut-être que quelqu'un a une meilleure réponse.

+0

Vous avez un peu de retard, mais vous avez bien compris :) –

+0

Oui, le but de la fonction d'analyse est de analyser les chaînes. – ngokevin