使用静态值时,我可以使<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
之前的工作
这个问题是this question的一个改进,以澄清导致问题的唯一原因是从静态字符串值到动态字符串值绑定的变化。我得到了很多其他建议,这与从静态到动态的变化无关,所以我认为最好重写一下这个问题来澄清这一点。但是如果有帮助的话,整个代码上下文都包含在那里的链接中。
替代方案最近有一些关于使用<iron-localstorage>
的喋喋不休。也许这是动态绑定基本上创建全局变量的最佳方式?
答案 0 :(得分:11)
是的,<iron-meta>
确实支持绑定变量,但可能不符合您的想法。
示例:http://plnkr.co/edit/QdNepDrg9b3eCTWF6oRO?p=preview
我在这里查看了您的代码,here和here,但我并不完全清楚您的期望是什么。希望我附属的复制者可能会有所启发。我看到你声明性地绑定<iron-meta id="meta" key="route" xvalue="foo-bar" value="{{route}}"></iron-meta>
这很好 - 当route
发生变化时,铁元key="route"
会相应地更新。
但是,请注意,在Polymer 1.0中,<iron-meta>
本质上是从父级到子级的单向绑定,因为您设置 a通过绑定到属性动态地生成元键值;但是为了获得这个价值,你必须通过iron-meta的byKey()
方法强制性地获得它。
<iron-meta>
只是一个简单的 monostate模式实现,没有内置路径通知机制。这意味着值更改不会向上传播。因此,做一些像
<!-- this does not work like the way you think -->
<iron-meta id="meta" key="foo" value="{{bar}}">
为了获取 foo
的值,或者 listen 更改为foo
,不起作用。这更像是 setter ,您可以根据数据绑定属性foo
设置bar
的值。
从我收集的内容来看,您似乎正在尝试实现某种全局变量功能。 monostate实现用于在Polymer 0.5中工作,但不在1.0中工作。不幸的是,在Google支持最佳实践&#34;为此,直到约会的建议对我来说似乎有点推测。您可能会发现此(Polymer 1.0 Global Variables)有用。
答案 1 :(得分:4)
我使用<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();
}
}