Polymer 1.0:<iron-meta> 是否支持绑定到动态变量?
Polymer 1.0: Does <iron-meta> support binding to dynamic variables?
我可以让我的 <iron-meta>
实例在使用静态值时正常工作。但是当我将该值绑定到动态变量(使用 {{}}
)时,它 <iron-meta>
不再按预期运行。
<iron-meta>
是否支持将其值绑定到动态变量?
<iron-meta id="meta" key="info" value="foo/bar"></iron-meta> // works
<iron-meta id="meta" key="info" value="{{str}}"></iron-meta> // fails
之前的工作
此问题是 的细化,目的是阐明导致问题的唯一原因是从静态字符串值到动态字符串值绑定的更改。我收到了很多其他建议,这些建议与从静态到动态的变化无关,所以我认为最好重写问题以澄清这一点。但是如果有帮助的话,整个代码上下文都包含在链接中。
替代解决方案
最近有一些关于使用 <iron-localstorage>
的讨论。也许这是进行动态绑定的最佳方式,本质上是创建全局变量?
是的,<iron-meta>
确实支持绑定到变量,但可能不是您想象的那样。
示例:http://plnkr.co/edit/QdNepDrg9b3eCTWF6oRO?p=preview
我在这里查看了您的代码,, and here 但我并不完全清楚您的期望是什么。希望我附上的复制品能说明一些问题。我看到您已声明性绑定 <iron-meta id="meta" key="route" xvalue="foo-bar" value="{{route}}"></iron-meta>
,这很好 - 当 route
更改时,iron-meta 的 key="route"
将相应更新。
但是,请注意,在 Polymer 1.0 中,<iron-meta>
本质上是 从父项到子项的单向绑定,因为您 通过绑定到 属性 来动态设置 元键值;但是要 获取 该值,您必须通过 iron-meta 的 byKey()
方法强制获取它。
<iron-meta>
只是一个简单的 单态模式 实现,没有内置路径通知机制。这意味着价值 变化不会向上传播 。因此,做类似
<!-- this does not work like the way you think -->
<iron-meta id="meta" key="foo" value="{{bar}}">
为了获取foo
的值,或者监听对foo
的改变,不行。这更像是 setter,您可以根据数据绑定 属性 bar
设置 foo
的值。
据我了解,您似乎正在尝试实现某种全局变量功能。单态实现过去在 Polymer 0.5 中有效,但在 1.0 中无效。不幸的是,在 Google 认可 "best-practice" 模式之前,迄今为止的建议对我来说似乎有点推测。您可能会发现此 (Polymer 1.0 Global Variables) 有帮助。
我已成功使用 <iron-signals>
来传达全球信息。我知道 <iron-signals>
文档中有一条警告不鼓励将其用于相关元素,但在广播共享资源时似乎就是这样。例如:
// source element
var db = SomeDB.init();
this.fire('iron-signal', { name: 'database', data: db });
<-- sink element -->
<iron-signals on-iron-signal-database="dbChange"></iron-signals>
class SinkElement {
dbChange(e, detail) {
this.db = detail;
this.db.getSomeData();
}
}
我可以让我的 <iron-meta>
实例在使用静态值时正常工作。但是当我将该值绑定到动态变量(使用 {{}}
)时,它 <iron-meta>
不再按预期运行。
<iron-meta>
是否支持将其值绑定到动态变量?
<iron-meta id="meta" key="info" value="foo/bar"></iron-meta> // works
<iron-meta id="meta" key="info" value="{{str}}"></iron-meta> // fails
之前的工作
此问题是
最近有一些关于使用 <iron-localstorage>
的讨论。也许这是进行动态绑定的最佳方式,本质上是创建全局变量?
是的,<iron-meta>
确实支持绑定到变量,但可能不是您想象的那样。
示例:http://plnkr.co/edit/QdNepDrg9b3eCTWF6oRO?p=preview
我在这里查看了您的代码,<iron-meta id="meta" key="route" xvalue="foo-bar" value="{{route}}"></iron-meta>
,这很好 - 当 route
更改时,iron-meta 的 key="route"
将相应更新。
但是,请注意,在 Polymer 1.0 中,<iron-meta>
本质上是 从父项到子项的单向绑定,因为您 通过绑定到 属性 来动态设置 元键值;但是要 获取 该值,您必须通过 iron-meta 的 byKey()
方法强制获取它。
<iron-meta>
只是一个简单的 单态模式 实现,没有内置路径通知机制。这意味着价值 变化不会向上传播 。因此,做类似
<!-- this does not work like the way you think -->
<iron-meta id="meta" key="foo" value="{{bar}}">
为了获取foo
的值,或者监听对foo
的改变,不行。这更像是 setter,您可以根据数据绑定 属性 bar
设置 foo
的值。
据我了解,您似乎正在尝试实现某种全局变量功能。单态实现过去在 Polymer 0.5 中有效,但在 1.0 中无效。不幸的是,在 Google 认可 "best-practice" 模式之前,迄今为止的建议对我来说似乎有点推测。您可能会发现此 (Polymer 1.0 Global Variables) 有帮助。
我已成功使用 <iron-signals>
来传达全球信息。我知道 <iron-signals>
文档中有一条警告不鼓励将其用于相关元素,但在广播共享资源时似乎就是这样。例如:
// source element
var db = SomeDB.init();
this.fire('iron-signal', { name: 'database', data: db });
<-- sink element -->
<iron-signals on-iron-signal-database="dbChange"></iron-signals>
class SinkElement {
dbChange(e, detail) {
this.db = detail;
this.db.getSomeData();
}
}