Создание пользовательского компонента, пользовательское свойство в схеме приводит к ошибке
Я хочу, чтобы в моей схеме было два пользовательских свойства, у которых есть запасное значение, если они не определены, или если их значение меньше 0.0
это схема:
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-сущности
<a-entity io3d-data3d="key: mykey; lightMapIntensity: 1.0" shadow="receive: true"></a-entity>
значение правильно используется компонентом, но когда я открываю 3D-редактор a-frame и нажимаю на объект - я получаю эту ошибку:
этого не происходит, если атрибуты не установлены в a-entity
,
Я делаю что-то не так при использовании пользовательских свойств? Есть ли способ определить необязательные свойства, которые по умолчанию имеют значение undefined или null?
Тип пользовательского свойства:
2 ответа
Инспектор фреймов пытается округлить значения, используя toFixed(decimalPlaces)
функция.
Переданные значения в компоненте являются строками, и, насколько я знаю, toFixed()
не работает со строками, по крайней мере, ни в моих экспериментах, ни в документации.
Простое решение - вернуть проанализированное значение:
if (value >= 0.0) {
return parseFloat(value);
}
Хотя при сравнении строк с числами с плавающей запятой выполняется дополнительный анализ, вы можете проанализировать значение перед проверкой:
value = parseFloat(value);
if (value >= 0.0) {
return value);
}
Итак, я заметил, что моя схема пыталась проанализировать мое свойство как строку. Я думаю, это запасной вариант, если вы не определили тип?
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
}
}
По крайней мере, у меня больше нет ошибки.
Может быть, у кого-то есть лучший ответ.