【问题标题】:How do I update one value within an object using setAttribute?如何使用 setAttribute 更新对象中的一个值?
【发布时间】:2016-08-02 18:25:55
【问题描述】:

我有一个元素,它包含一个名为“声音”的属性。这个声音属性的值是一个对象。此对象的属性之一是“volume”。

换句话说:

<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'
});

我不想替换整个对象。我只想为一个属性替换一个值。有没有最好的方法来解决这个问题?

【问题讨论】:

    标签: javascript aframe


    【解决方案1】:

    您可以使用此处文档中的 3 参数版本的 setAttribute:https://aframe.io/docs/core/entity.html#Updating-Multi-Property-Component-Data

    具体来说,您可以执行以下操作:

    element.setAttribute("sound", "volume", "4");
    

    【讨论】:

      【解决方案2】:

      你可以得到属性对应的对象,只替换你需要的属性。

      类似这样的:

      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));
      

      这是fiddle

      【讨论】:

      • getAttribute 返回一个字符串,而不是一个对象,所以这不起作用
      • 您可以使用 JSON.parse 将字符串解析为对象。但是我看到您在 HTML 中的声音属性数据并不是您指定的真正的对象..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      相关资源
      最近更新 更多