我做了一个简单的概念证明Polymer 1.0应用程序,演示了我的问题:JSBin。检测阵列突变
在我的问题,我使用array mutation methods改变的磁盘阵列,它包含了购物项目列表。
然而,这似乎并不如预期的工作。我做在dom-repeat
和打印数组的长度时得到一个变化。 但是我不要当我打印数组本身时,或者当我将它包装在函数中时,获取更改事件。
总之,这是为什么这样工作?
<p>Number of items: [[list.length]]</p>
?为什么这个不工作?
<p>Items inline: [[list]]</p>
<p>Observe function : [[_observe(list)]]</p>
此外,当我取消注释以下行(在JSBin),事情似乎为indened工作。但我不喜欢它,因为它有点冒险。
app.notifyPath('list', app.list.slice());
我已经阅读了本发行于slice()
修复跌跌撞撞:https://github.com/Polymer/polymer/issues/2068
编辑
因此,审查意见后,回答这个问题:“这是由设计“是肯定的。该阵列本身不会改变(因为它只是一个参考),但它的属性做更改。这就是为什么slice()
强制重新加载,因为它创建了一个浅拷贝。
然而,人们可以说这是否正常。是的,变量list
本身没有变化本身。但将[[list]]
放入HTML代码中实际触发了toString()
。并且该函数的结果已经更改为。
我想我坚持了捎带的length
财产现在...
您jsbin采样工作正常,我在Chrome –
,它只是因为链接对象它只是链接,它并没有改变,观察list.length和返回列表 –
或者你可以在一些var中备份链接到数组,通知没有第二个参数,并立即通知备份列表,我不知道什么更快,但这种方法不需要克隆数组,并且更多的不需要深入在复杂情况下克隆。 –