我不确定如何解决这个问题。我相信有人会很快知道这一点。
我有一个对象数组并修改了一个属性。我有一个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上强制渲染,但我更喜欢数据绑定方式。
答案 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
没有更改该值,它会通知元素先前的更改(第二个参数被有效忽略)。