Как обновить одно значение в объекте с помощью setAttribute?

У меня есть элемент, который содержит атрибут под названием «звук». Значением этого звукового атрибута является объект. Одним из свойств этого объекта является «объем».

Другими словами:

<a-entity position='0 0 0' sound='src: url; on: click; volume: 2.0;'></a-entity>

Вот так:

{
  position: '0 0 0',
  sound: {
    src: 'url',
    on: 'click',
    volume: '2.0'
  }
}

Я использую setAttribute для обновления атрибута тома, но я не знаю, есть ли эффективный способ настроить таргетинг только на одно свойство, не изменяя другие свойства объекта.

По сути, это заменяет звуковой объект и удаляет все свойства, которые не указаны (удаляются свойства src AND on):

element.setAttribute('sound', {
  volume: '4'
});

Я не хочу заменять весь объект. Я хочу заменить только одно значение для одного свойства. Есть ли лучший способ сделать это?


person rpeg    schedule 12.04.2016    source источник


Ответы (2)


Вы можете использовать версию setAttribute с тремя аргументами, которая находится в документации здесь: https://aframe.io/docs/core/entity.html#Updating-Multi-Property-Component-Data

В частности, вы можете сделать что-то вроде:

element.setAttribute("sound", "volume", "4");
person RangerMauve    schedule 13.04.2016

Вы можете получить объект, соответствующий атрибуту, и заменить только те свойства, которые вам нужны.

Что-то вроде этого:

var data = element.getAttribute('sound');
data.volume = '4';
element.setAttribute('sound', data);

Изменить

Если вы установите данные в html как настоящий объект JS, вы можете сделать:

var newData = JSON.parse(element.getAttribute('sound'));
newData.volume = 4;
element.setAttribute('sound', JSON.stringify(newData));

Вот скрипта

person Lulylulu    schedule 12.04.2016
comment
getAttribute возвращает строку, а не объект, поэтому это не сработает - person Dieterg; 12.04.2016
comment
вы можете использовать JSON.parse для анализа строки в объект. Но я вижу, что ваши данные атрибута звука в HTML на самом деле не являются объектом, как вы указали. - person Lulylulu; 12.04.2016