元素绑定到内存中的同一对象时的绑定

时间:2015-06-26 18:08:53

标签: polymer polymer-1.0

我有一种情况,我有多个元素绑定到相同的路径,因此下面的JS对象相同。因此,在一个地方对对象的更改会立即被另一个元素看到(尽管它并不知道)。文档说我需要手动向系统发出警告或使用自动绑定,我就是这样。所以正在进行notifyPath通话。

notifyPath DOM遍历中,它最终接近应该对更改做出反应的元素,但notifyPath代码确实a check to see if the element already knows about the change。在我的例子中,因为它们都指向同一个JS对象,old值已经是new值,因为它们在内存中确实是同一个对象。这会阻止变化的传播。

submitted this issue as a potential problem但是对此期间的方式感到好奇。

以下是该问题的JSBin:http://jsbin.com/hemexifami/2/edit?html,output

这似乎是一种常见的情况。我已经在控制台上直接手动notifyPath尝试将元素传递给它,但是代码只看到oldnew(因为它们都是相同的JavaScript数组,因此它实际上并没有做任何事情。文档说它应该返回一个指示,但实际上并没有。请参阅我的错误here

你们之前有没有打过这个?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Polymer本身并不会观察Object引用,相反,为了提高性能,它会根据如何命名它们来跟踪对象的更改它们在树中彼此之间的关系< / em>的

开发指南中的部分讨论了如何使用array-selector元素来协调数组和对象绑定中的选择:

https://www.polymer-project.org/1.0/docs/devguide/templates.html#array-selector

如果我们添加一个知道array-selector的{​​{1}}元素,它将为您生成card.sections的可绑定版本。

currentSection

我们还添加了一些代码来告诉选择器在索引更改时选择哪个项目:

<array-selector id="selector" items="{{card.sections}}" selected="{{currentSection}}"></array-selector>

以下是使用数组选择器修改jsbin:http://jsbin.com/qidehe/edit?html,output