Javascript 无法更改帧中单击按钮时的纹理

Javascript 无法更改帧中单击按钮时的纹理,javascript,three.js,aframe,Javascript,Three.js,Aframe,我正在尝试加载一个gltf模型,通过使用register组件更改按钮单击时的纹理。现在我可以按预期加载和显示模型了。但是,当单击按钮进行纹理更改时,我无法反映任何更改 这是我试过的 <div class=" radisi"> <input type='button' class='radmi rad1' value='next' /></div> <a-entity id="newmod" example gltf-model="src: url(

我正在尝试加载一个gltf模型,通过使用register组件更改按钮单击时的纹理。现在我可以按预期加载和显示模型了。但是,当单击按钮进行纹理更改时,我无法反映任何更改

这是我试过的

<div class=" radisi">
<input type='button' class='radmi rad1' value='next' /></div>

  <a-entity id="newmod" example gltf-model="src: url(model/straw.glb);"
              position="0 1.8 -1" scale="1,1,1"></a-entity>



    AFRAME.registerComponent('example', {

    init: function() {
    var el = this.el;
    el.addEventListener('model-loaded', function (e) {
    e.detail.model.traverse(function(child) {

        if (child instanceof THREE.Mesh){
             if (child.material.name == "Craem")  {
             material.map =   new THREE.TextureLoader().load( "assets/img/choco.png" );
                       }
                    }
                });
             })
          }
      },3000)
它表示未定义的addEventListener。
请告诉我我错过了什么。多谢各位

您注册了一个组件,以等待加载模型并更改材质

然后,您有一个单击侦听器,它再次等待加载模型,而此时模型可能已经加载。在jQuery支持的单击侦听器中不能执行this.el。此.el由A-Frame组件提供


将单击侦听器移动到组件中,然后从单击侦听器中删除模型加载的侦听器。

再次调用网格。这对我很有效

$(".radisi").click(function(){

let object  = el.getObject3D('mesh');

        object.traverse(function(child) {

            if (child instanceof THREE.Mesh)
                    {
                        if (child.material.name == "Craem")  {
                             child.material.map=new THREE.TextureLoader().load( "assets/img/strawberry.png" );;

                                }
                    }
            });
});

尝试设置material.needsUpdate=true;在指定material.map之后?编辑:nvm-未正确阅读问题。但是您的单击处理程序似乎不在组件的范围内发生。您需要保留对组件的引用,并使用该引用代替this.el,因为单击处理程序中的this可能是窗口或其他内容。@manthrax尝试使用var el=window.el;在将click listener移动到组件中并删除加载的模型后,它再次显示addEventListener未定义,您能告诉我在e.detail.model.traverse中我应该替换什么来代替e吗?e、 detail.model.traversefunctionchild{console.logclicked;if-child-instanceof-THREE.Mesh{if-child.material.name==Craem{child.material.map=new-THREE.TextureLoad-assets/img/vanilla.png;}}}};
$(".radisi").click(function(){

let object  = el.getObject3D('mesh');

        object.traverse(function(child) {

            if (child instanceof THREE.Mesh)
                    {
                        if (child.material.name == "Craem")  {
                             child.material.map=new THREE.TextureLoader().load( "assets/img/strawberry.png" );;

                                }
                    }
            });
});