Javascript-聚合物dom-if如果在if之后会怎样?
作者:互联网
我的元素有一个demoMode布尔属性,我想在属性为true时显示一些虚拟数据,而在false时显示实时数据.
我试过了:
<template dom-if if="{{_isDemo()}}">hello from demo</template>
<template dom-if if="{{_isLive()}}">hello from live</template>
其中的函数只是{return this.demoMode;}和{return!(this.demoMode);}.
无论如何,实时模式似乎始终显示.我尝试使用方括号([[]]),大括号({{}}),甚至不使用方括号(if =“ _ isDemo()”).我需要使用它们吗?
当前的工作方式是使用应用程序,还有一个demo / index.html发送demo-mode属性,例如:
<my-app demo-mode></my-app>
(如果有人输入,我愿意采用其他方式!)
解决方法:
如@montrealist所示,if属性应评估为布尔值.绑定本身不必是布尔值;也可以是返回布尔值的计算得出的binding/property.
您为if条件使用了计算的绑定,但是该绑定缺少变量依赖项(即参数),因此在初始化时仅对它进行一次评估.我假设demoMode具有一个虚假的默认值,这将导致_isLive()始终评估为true.
由于_isDemo()和_isLive()都依赖于this.demoMode,因此您的计算绑定应分别为_isDemo(demoMode)和_isLive(demoMode):
HTMLImports.whenReady(() => {
Polymer({
is: 'x-foo',
properties: {
demoMode: {
type: Boolean,
value: false
}
},
_isDemo: function(demo) {
return demo;
},
_isLive: function(demo) {
return !demo;
},
_toggleDemo: function() {
this.demoMode = !this.demoMode;
}
});
});
<head>
<base href="https://polygit.org/polymer+1.8.1/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<button on-tap="_toggleDemo">Toggle Demo Mode</button>
<template is="dom-if" if="{{_isDemo(demoMode)}}">
<h1>Demo Mode</h1>
</template>
<template is="dom-if" if="{{_isLive(demoMode)}}">
<h1>Live Mode</h1>
</template>
</template>
</dom-module>
</body>
I tried using square brackets (
[[]]
), curly brackets ({{}}
), and even no brackets (if="_isDemo()"
). Do I need to use them?
是的,您需要它们.数据绑定(包括计算的绑定)需要使用方括号(方括号或大括号).通常,大括号表示双向数据绑定,而方括号表示单向数据绑定.对于计算的绑定,它们都具有相同的效果.
标签:polymer,polymer-1-0,javascript 来源: https://codeday.me/bug/20191026/1934648.html