聚合物静态变量侦听器?
Polymer static variable listener?
我一直在尝试搜索,但运气不佳。假设您有一个组件 Racing Car
:
Polymer({
is: 'racing-car',
properties: {
ready: { // this variable is intended to be static
type: Boolean,
value: false,
observer: 'onCarReady'
}
},
onCarReady: function(newVal, oldVal) {
console.log('time to run!');
}
})
在您应用的其他地方,您初始化了 4 辆赛车:
<racing-car id="car1"></racing-car>
<racing-car id="car2"></racing-car>
<racing-car id="car3"></racing-car>
<racing-car id="car4"></racing-car>
这不是静态变量的最佳示例,但希望您能理解。
想象一场比赛,我想一次更改所有赛车实例的 ready
属性,但我不确定如何在 Polymer 中执行此操作。当然我可以做一些像
<racing-car id="car1" ready="{{globalVariableReady}}"></racing-car>
<racing-car id="car2" ready="{{globalVariableReady}}"></racing-car>
<racing-car id="car3" ready="{{globalVariableReady}}"></racing-car>
<racing-car id="car4" ready="{{globalVariableReady}}"></racing-car>
但这感觉有点蠢。
是否可以这样做:
properties: {
ready: { // this variable is intended to be static
type: Boolean,
value: {{globalVariableReady}},
observer: 'onCarReady'
}
},
不是以那种方式,而是在 racing-car
.
的所有实例中以某种方式全局更改此 属性
聚合物无法绑定到 "global variable" 如果您按字面意思使用该术语,即
<script>var globalVariableReady = true;</script>
您可能可以通过编程方式做您想做的事。在加载四个赛车元素后运行的一些脚本中,调用:
document.querySelectorAll('racing-car').forEach(el => el.ready = true);
注意:上面的代码假定使用 iterable node lists.
的 ES6 兼容浏览器
使用绑定,但如果赛车标签位于您定义的更大的自定义元素内,您可以在其中定义一个名为 "globalVariableReady" 的 属性 来使用您的术语。或者在 autobind template 中,您在模板元素上设置值 "globalVariableReady" 一次,然后将快速连续更新所有四个子元素。
您在找这样的东西吗?
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<my-element></my-element>
<my-element></my-element>
<my-element></my-element>
<my-element></my-element>
<div onclick="changeValue()">click me to change value</div>
<script>
function changeValue() {
glob = "new Value";
}
</script>
</body>
</html>
<dom-module id="my-element">
<template>
<style>
:host {
display: block;
}
</style>
click me to check the value
</template>
</dom-module>
<script>
var glob = 'initial Value';
Polymer({
is: 'my-element',
listeners: {
'tap': '_onTap'
},
_onTap: function() {
alert(glob);
}
});
</script>
找到答案。 iron-meta
是我要找的。虽然它不通过数据绑定传播,所以我使用 akc-meta
代替,类似的版本
我一直在尝试搜索,但运气不佳。假设您有一个组件 Racing Car
:
Polymer({
is: 'racing-car',
properties: {
ready: { // this variable is intended to be static
type: Boolean,
value: false,
observer: 'onCarReady'
}
},
onCarReady: function(newVal, oldVal) {
console.log('time to run!');
}
})
在您应用的其他地方,您初始化了 4 辆赛车:
<racing-car id="car1"></racing-car>
<racing-car id="car2"></racing-car>
<racing-car id="car3"></racing-car>
<racing-car id="car4"></racing-car>
这不是静态变量的最佳示例,但希望您能理解。
想象一场比赛,我想一次更改所有赛车实例的 ready
属性,但我不确定如何在 Polymer 中执行此操作。当然我可以做一些像
<racing-car id="car1" ready="{{globalVariableReady}}"></racing-car>
<racing-car id="car2" ready="{{globalVariableReady}}"></racing-car>
<racing-car id="car3" ready="{{globalVariableReady}}"></racing-car>
<racing-car id="car4" ready="{{globalVariableReady}}"></racing-car>
但这感觉有点蠢。
是否可以这样做:
properties: {
ready: { // this variable is intended to be static
type: Boolean,
value: {{globalVariableReady}},
observer: 'onCarReady'
}
},
不是以那种方式,而是在 racing-car
.
聚合物无法绑定到 "global variable" 如果您按字面意思使用该术语,即
<script>var globalVariableReady = true;</script>
您可能可以通过编程方式做您想做的事。在加载四个赛车元素后运行的一些脚本中,调用:
document.querySelectorAll('racing-car').forEach(el => el.ready = true);
注意:上面的代码假定使用 iterable node lists.
的 ES6 兼容浏览器使用绑定,但如果赛车标签位于您定义的更大的自定义元素内,您可以在其中定义一个名为 "globalVariableReady" 的 属性 来使用您的术语。或者在 autobind template 中,您在模板元素上设置值 "globalVariableReady" 一次,然后将快速连续更新所有四个子元素。
您在找这样的东西吗?
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<my-element></my-element>
<my-element></my-element>
<my-element></my-element>
<my-element></my-element>
<div onclick="changeValue()">click me to change value</div>
<script>
function changeValue() {
glob = "new Value";
}
</script>
</body>
</html>
<dom-module id="my-element">
<template>
<style>
:host {
display: block;
}
</style>
click me to check the value
</template>
</dom-module>
<script>
var glob = 'initial Value';
Polymer({
is: 'my-element',
listeners: {
'tap': '_onTap'
},
_onTap: function() {
alert(glob);
}
});
</script>
找到答案。 iron-meta
是我要找的。虽然它不通过数据绑定传播,所以我使用 akc-meta
代替,类似的版本