当元素绑定到内存中的同一对象时的绑定
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,将数组传递给它,但是代码只看到 old
是 new
(因为它们都是相同的 JavaScript 数组,所以它实际上没有做任何事情。文档说它应该 return 表明这一点,但实际上并没有。请参阅我关于 here.[=22 的错误=]
你们中有人曾经和这个打过架吗?在此先感谢您的帮助!
Polymer 本身不观察对象引用,相反,为了提高性能,它会根据您如何命名它们 和它们如何关联来跟踪对象的变化树上的彼此.
开发指南中的此处部分讨论了如何使用 array-selector
元素在数组和对象绑定中的 select 离子之间进行协调:
https://www.polymer-project.org/1.0/docs/devguide/templates.html#array-selector
如果我们添加一个知道 card.sections
的 array-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 的修改
我遇到这样一种情况,我有多个元素绑定到相同的路径,因此下面有相同的 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,将数组传递给它,但是代码只看到 old
是 new
(因为它们都是相同的 JavaScript 数组,所以它实际上没有做任何事情。文档说它应该 return 表明这一点,但实际上并没有。请参阅我关于 here.[=22 的错误=]
你们中有人曾经和这个打过架吗?在此先感谢您的帮助!
Polymer 本身不观察对象引用,相反,为了提高性能,它会根据您如何命名它们 和它们如何关联来跟踪对象的变化树上的彼此.
开发指南中的此处部分讨论了如何使用 array-selector
元素在数组和对象绑定中的 select 离子之间进行协调:
https://www.polymer-project.org/1.0/docs/devguide/templates.html#array-selector
如果我们添加一个知道 card.sections
的 array-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 的修改