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

Bindings when elements are bound to same object in memory

我遇到这样一种情况,我有多个元素绑定到相同的路径,因此下面有相同的 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-ing,将数组传递给它,但是代码只看到 oldnew(因为它们都是相同的 JavaScript 数组,所以它实际上没有做任何事情。文档说它应该 return 表明这一点,但实际上并没有。请参阅我关于 here.[=22 的错误=]

你们中有人曾经和这个打过架吗?在此先感谢您的帮助!

Polymer 本身不观察对象引用,相反,为了提高性能,它会根据您如何命名它们它们如何关联来跟踪对象的变化树上的彼此.

开发指南中的此处部分讨论了如何使用 array-selector 元素在数组和对象绑定中的 select 离子之间进行协调:

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

如果我们添加一个知道 card.sectionsarray-selector 元素,它将为您生成 currentSection 的可绑定版本。

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

我们还添加了一些代码来告诉 select 或当索引更改时 select 哪个项目:

    observers: [
      '_selectSection(card.sections, currentSectionIndex)'
    ],

    _selectSection(sections, index) {
      this.$.sectionSelector.select(sections[index]);
    }        

这里是使用 array-select 或者:http://jsbin.com/qidehe/edit?html,output

对你的 jsbin 的修改