开发者问题收集

dom-repeat 中出现错误“Uncaught TypeError: Cannot set property 'src' of null”

2017-10-07
152

我有一个 dom-repeat,我想在其中插入一个基于函数的带有 src 的图像。这次在函数中使用索引无法解决问题,现在我陷入困境。Polymer 版本是 1.8.0 到目前为止,我尝试了不同的方法,最后一个是:

<template is="dom-repeat" items="{{top.top}}" as="item">
       <img id="testid" src="{{imgurl}}">
</template>

<script>
   Polymer({
     is: 'test',

  ready: function() {
// Polymer.dom(this).querySelector('testid').src = this.imgurl;
 this.$.testid.src = this.imgurl;
  } ,

properties: {
    top: {
        type: Array,
        value: function() { return []; }
    },

    imgurl: {
        type: String,
        notify: true,
        reflectToAttribute: true,
        computed: 'changeimg(score, oldscore)'  
        }
  },

  changeimg: function(score, oldscore) {

      if( score>oldscore ){url = "images/reddown.png";}
      else if(score<oldscore){url ="images/greenup.png";}
      else {url = "images/blueorizontal.png";}
      return url;
  },

....


  });
 </script>

结果总是一样... 有什么想法吗?谢谢

2个回答

this.$ 仅适用于首次创建元素时属于元素一部分的元素。使用 dom-repeatdom-if 时不会出现这种情况,因此 this.$.testid 不存在,从而导致您看到的错误。

另外,您使用 querySelector 的另一次尝试将只返回一个 img 元素,但在呈现时,您的每个分数条目都会有一个 img 元素。

计算属性 imgurl 也帮不了您,因为您的元素只有一个 imgurl 属性,无论显示什么分数条目,该属性始终相同,即使提供了分数值也是如此。

解决问题的方法是使用 计算绑定 ,它会计算出每个显示的正确 img src分数。

<img src="[[changeimg(item.score, item.oldscore)]]">
Scarygami
2017-10-08

问题出在 computed: 'changeimg(score, oldscore)' 这一行。

您尚未定义 scoreoldscore 。这是计算值,不是观察者。

因此,定义这些将解决问题。

Ofisora
2017-10-08