使用Polymer在数组中突变对象属性

时间:2016-10-30 22:10:58

标签: arrays polymer

我不确定如何解决这个问题。我相信有人会很快知道这一点。

我有一个对象数组并修改了一个属性。我有一个firebase监听器' child_changed'。更新firebase时需要更新阵列。这是下面的代码。



     dbRefList.on('child_changed', function(snap) {
          
          var len = this.grocerylist.length;
          for(var i=len; i--;) {
   
            if(this.grocerylist[i].key === snap.key) {
              this.set(['grocerylist', i, 'selected'], snap.val().selected);
            }
          }
        
          this.notifyPath('grocerylist', this.grocerylist.slice());

        }.bind(this));




当修改数组时,我想要触发模板repeat-dom。我知道this.set不会触发数组变异子属性但是我不知道如何解决这个问题。我做了研究并尝试了很多解决方案。

我可以在模板dom-repeat上强制渲染,但我更喜欢数据绑定方式。

1 个答案:

答案 0 :(得分:1)

所以这段代码(现在只有this.set)会导致grocerylist.i.selected的值在dom-repeat内更新(假设它已经绑定在那里)它实际上出现了)。

你看到了什么行为?您是否尝试根据selected值对列表进行过滤或排序?在这种情况下,您可能需要在observe="selected"上添加dom-repeat

(另外 - 您是否已确认使用您期望的child-changed值调用this回调 - 元素 - 而不是window或其他内容?)

您应该可以通过执行this.grocerylist = this.grocerylist.slice()this.set('grocerylist', this.grocerylist.slice()); ... notifyPath来强制刷新,因为notifyPath没有更改该值,它会通知元素先前的更改(第二个参数被有效忽略)。