我有一个自定义元素,如下所示:
<polymer-element>
<template if="{{primaryLoaded}}">
<template repeat="{{pData in primaryData}}">
<p>{{pData.propertyOne}}</p>
<p>{{someClass.someOperation()}}</p>
<template if="{{secodaryLoaded}}">
<p>{{secondaryData.someProperty}}</p>
<p>{{someClass.someOperation()}}</p>
</template>
</template>
</template>
</polymer-element>
和相应的飞镖文件:
class CustomElement extends PolymerElement with ObservableMixin
{
@observable bool primaryLoaded = false;
@observable bool secondaryLoaded = false;
@observable var primaryData;
@observable var secondaryData;
@observable var someClass;
void created()
{
primaryData = toObservable(new List<var>());
secondaryData = toObservable(new List<var>());
}
void inserted()
{
someClass = new SomeClass();
loadPrimaryData().then((pData) {
primaryData = pData;
primaryLoaded = true;
loadSecondaryData().then((sData) {
secondaryData = sData;
secondaryLoaded = true;
});
});
}
}
一切都很好primaryData
。它的性能得到印刷和调用someOperation()
上someClass
正确打印其数据。
问题出在嵌套模板中。<template if="{{secondaryLoaded}}">
显示下没有任何内容。甚至对的调用也someClass.someOperation()
无法显示任何内容。
这里的范围有问题吗?看起来外部模板可以毫无问题地引用dart文件中定义的属性,但嵌套模板不能。
我通过在此处设置自定义绑定委托了解到在模板中将变量设置为全局变量。但是,我无法在自定义元素中设置bindingDelegate,因为它isTemplate
返回false。
还有其他方法可以在自定义模板中设置全局变量吗?还是我要解决所有这些错误?
这是一个错误。您可以为这个问题加注星标,以通知更改:
您现在唯一能做的就是将嵌套的模板转换为其他聚合物元素,或者找出一种方法以使模板不嵌套。
在您的情况下,if="primaryLoaded"
可以使用set来设置primaryData = null
模板primaryData
,假设设置为,则不应该显示任何内容,而不必使用primaryData
它@observable
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句